-
. z.
JVM垃圾回收机制
JVM垃圾回收机制
Java是一门面向对象的语言,具有高可用,分布性,可移植性等众多优势,将代码运行在JVM平台上,强大的 = null;
public static void main(String[] args) {
Demo a = new Demo();
Demo b = new Demo();
= b;
= a;
a = null;
b = null;
}
}
-
. z.
在这段代码中,此时demo a中的instance指向了b,demo b中的instance指向了a,此时a到b 的引用,b到a的引用都已经断开,demo a,demo b两个对象都已经无法再次调用,故而两个对象都已经是垃圾,但根据引用计数算法(即传统的教学方式所描述的垃圾)该对象并非垃圾,因为此时a,b都存在互相指向的问题,我们把这样的问题称之为循环引用问题,
--正确判断垃圾的标准:可达性算法
通过一系列的“GC ROOTS〞的对象作为起始点,从这些节点开场向下搜索,搜索所走过的链称之为引用链(Reachability Analysis),当这个对象不能够到达“GC ROOTS〞顶点时,则这样的对象才算是一个垃圾 可以作为GC ROOTS 的四种对象
-
. z.
在这里需要解释的是在JVM 规*中强调 方法区和堆所属于逻辑上的一个整体,但在JVM具体的实现中,方法区又名no-heap即非堆,这里以实现为主
-
. z.
堆分成两类类:
:新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,完毕生命。新生区又分为两局部: Eden space 和幸存者区〔Survivor pace〕 ,所有的类都是在Eden区被new出来的。幸存区有两个: 0区〔Survivor 0 space〕和1区〔Survivor 1 space〕。当Eden的空间用完时,程序又需要创立对象,JVM的垃圾回收器将对伊甸园区进展垃圾回收(Minor GC),将Eden区中的不再被其他对象所引用的对象进展销毁。然后将Eden中的剩余对象移动到幸存 0区。假设幸存 0区也满了,再对该区进展垃圾回收,然后移动到 1 区。那如果1 。假设养老区也满了,则这个时候将产生Major GC〔FullGC〕,进展养老区的内存清理。假设养老区执行了Full GC之后发现依然
jvm垃圾回收机制 来自淘豆网m.daumloan.com转载请标明出处.