JVM
1.JVM包含哪些部分
- 方法区:属于线程共享,所有字段和方法字节码,以及构造函数,接口定义都在方法区,
总的来说所有定义的方法都在方法区静态变量,常量,类信息,运行时常量池。线程共享
- 堆:实例变量,实例对象。线程共 栈:主要存储基本类型和引用类型变量,主管java运行,是在线程创建时创建,生命周期伴随线程的消亡而消亡。
- 本地变量:输入参数输出参数以及方法中的变量
- 栈操作:记录出栈,入栈的操作
- 栈帧操作:记录类文件,方法等
- 程序计数器:每个线程都有一个程序计算器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记
- 本地方法栈:与虚拟机栈意义相似,区别在于虚拟机栈用于使Java方法,而本地方法栈则是针对于Native方法服务。
2.判断对象存活
可达性算法分析
此算法的核心思想:通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为“引用链”,当一个对象到 GC Roots 没有任何的引用链相连时(从 GC Roots 到这个对象不可达)时,证明此对象不可用。

对象Object5 —Object7之间虽然彼此还有联系,但是它们到 GC Roots 是不可达的,因此它们会被判定为可回收对象。
在Java语言中,可作为GC Roots的对象包含以下几种:
虚拟机栈(栈帧中的本地变量表)中引用的对象。
方法区中静态属性引用的对象
方法区中常量引用的对象
本地方法栈中(Native方法)引用的对象
3.GC回收算法

分代收集算法
分代收集算法就是目前虚拟机使用的回收算法,它解决了标记整理不适用于老年代的问题,将内存分为各个年代,在不同年代使用不同的算法,从而使用最合适的算法,新生代存活率低,可以使用复制算法。而老年代对象存活率搞,没有额外空间对它进行分配担保,所以只能使用标记清除或者标记整理算法。
浙公网安备 33010602011771号