宋红康JVM笔记
文章平均质量分 88
宋红康JVM笔记
小小低头哥
这个作者很懒,什么都没留下…
展开
-
第十七章垃圾回收器
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。垃圾收集机制是Java的招牌能力极大地提高了开发效率。这当然也是面试的热点。那么,Java常见的垃圾收集器有哪些?截止JDK 1.8,一共有7款不同的垃圾收集器。每一款不同的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器。原创 2024-03-10 11:21:00 · 886 阅读 · 0 评论 -
第十六章垃圾回收相关概念
随着元数据区的引入,方法区内存已经不再那么窘迫,所以相应的ooM有所改观,出现00M,异常信息则变成了:“java.lang.OutOfMemoryError: Metaspace"。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为null,就是可以当做垃圾被收集了,当然具体回收时机还是要看垃圾收集策略。单例的生命周期和应用程序是一样长的,所以单例程序中,如果持有对外部对象的引用的话,那么这个外部对象是不能被回收的,则会导致内存泄漏的产生。原创 2024-03-10 11:00:02 · 775 阅读 · 0 评论 -
第十五章垃圾回收相关算法
标记阶段:引用计数算法、可达性分析算法清除阶段:标记清除算法、复制算法、标记-压缩算法如图1中,如果p=null,按理来说,后面三个节点也不要了。但是由于都存在引用,计数器都为1,导致引用计数算法无法将其视为垃圾进行GC,所以出现了内存泄漏。但是注意,这种内存泄漏只在引用计数算法中存在,其他算法可以解决这个问题。又因为Java中没有使用这类算法,所以Java中不存在这种内存泄漏问题。程序运行结果中出现了GC,则说明Java确实使用的不是引用计数算法,因为即使栈中两个引用为Null了,但是堆中这两个实例还分原创 2024-03-10 10:51:23 · 1018 阅读 · 0 评论 -
第十四章垃圾回收概述
垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。什么是垃圾( Garbage)呢?垃圾是指在。原创 2024-03-10 09:10:09 · 643 阅读 · 0 评论 -
第十三章StringTable
比如s3.intern(),则在堆中的字符串常量池就有一个新的引用,该引用指向s3在堆中指向的new String(“11”)对象。当s4 = '‘11’'时,很容易知道s4的“11”是指向字符串常量池中的“11”,而由于字符串常量池中只保存了指向堆中“11”的引用,所以s4实际上也是指向堆中的“11”对象。调用 intern 方法时,如果根据 equals(Object) 方法的判断,字符串池中已包含一个与此字符串对象相等的字符串,则返回字符串池中的字符串。大的网站平台,需要内存中存储大量的字符串。原创 2024-03-10 09:08:23 · 539 阅读 · 0 评论 -
第十二章执行引擎
图1 JVM架构前面讲完了图1JVM架构中的大部分,只剩下执行引擎没讲了,这次讲一下执行引擎。图2 执行引擎执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但。原创 2024-03-10 09:06:03 · 638 阅读 · 0 评论 -
第十一章本地内存
读写文件,需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要内存如右图的操作。这里需要两份内存存储重复数据,效率低。原创 2024-02-24 11:36:39 · 221 阅读 · 0 评论 -
第十章对象的实例化内存布局与访问定位
意思是所有用过的内存在一边,空闲的内存在另外一边,中间放着一个指针作为分界点的指示器,分配内存就仅仅是把指针向空闲那边挪动一段与对象大小相等的距离罢了。意思是虚拟机维护了一个列表,记录上哪些内存块是可用的]再分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的内容。将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储在对象的对象头中。如果内存不是规整的,已使用的内存和未使用的内存相互交错,那么虚拟机将采用的是空闲列表法来为对象分配内存。原创 2024-02-24 11:35:32 · 685 阅读 · 0 评论 -
第九章方法区
图1 JVM架构-简图前面运行时数据区中是剩下方法区没讲了 这次讲解方法区图9 方法区总结。原创 2024-02-24 11:33:32 · 1030 阅读 · 0 评论 -
第八章 堆
图1 JVM架构-简图前面已经介绍了类加载子系统、本机方法接口和本地方法库,以及运行时数据区中的程序技术器、本地方法栈、虚拟机栈。本节介绍运行时数据区的堆一个JVM实例(一个实例对应一个进程)只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。try {Run——>Debug Configurations得到图2图2 修改堆内存在红色矩形框中输入。原创 2024-02-24 11:29:27 · 1145 阅读 · 0 评论 -
第七章 本地方法栈
第七章 本地方法栈1. 本地方法栈Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法(第六章本地方法)的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)如果线程请求分配的栈容量超过本地方 法栈允许的最大容量,Java虚拟机将会抛出一个 stackoverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Jav原创 2024-02-24 11:19:03 · 218 阅读 · 0 评论 -
第六章 本地方法接口
简单地讲,一个Native Method就是一个Java调用非Java代码的接口。该方法的实现由非Java语言实现,比如c。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在c++中,你可以用extern "c"告知C++编译器去调用一个c的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合c/C++程序。原创 2024-02-24 11:17:31 · 890 阅读 · 0 评论 -
第五章虚拟机栈
由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是:跨平台,指令集小(八位),编译器容易实现。基于寄存器的方式和具体CPU耦合比较高,指令集是十六位的缺点是:性能下降,实现同样的功能需要更多的指令。原创 2024-02-24 11:15:37 · 875 阅读 · 0 评论 -
第四章程序计数器(PC寄存器)
JVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。图2 PC寄存器工作图作用:PC寄存器用来存储向下一条指令的地址,也就是即将要执行的指令。由执行引擎读取下一条指令。原创 2024-02-24 11:01:08 · 709 阅读 · 0 评论 -
第三章运行时数据区概述及线程
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。图2 运行时数据区Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会。原创 2024-02-24 10:57:54 · 916 阅读 · 0 评论 -
第二章类加载子系统
宋红康JVM类加载子系统笔记,分析了类加载以及类加载过程、类加载器分类、双亲委派机制等原创 2024-01-29 22:18:49 · 1020 阅读 · 0 评论