其他分享
首页 > 其他分享> > JVM理解2

JVM理解2

作者:互联网

1、垃圾回收(GC)

GC(Garbage Collection,即垃圾回收)的基本原理:将内存中不再被使用的对象进行回收。垃圾回收主要是发生在堆内存里面,在1.8以后FULLGC也会发生在meta space中。

GC 中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java 在对对象的生命周期特征进行分析后,按照新生代、老年代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停。

 

2、垃圾定位

在进行垃圾回收之前,需要首先进行垃圾定位,即判断哪些对象可以进行回收。当对象没有被任何引用指向时就可被垃圾回收。

 

2.1、引用计数法

引用计数法也就是记录当前对象的引用次数,当引用次数为0时则进行回收。给对象添加一个引用计数器,每当有一个地方引用它,计数器值就加一;相反的,当引用失效的时候,计数器值就减一;任何时刻计数器为0的对象就是不可能再被使用的。也就是说,当计时器的数值为0的时候,这个对象就可以被回收了。

引用计数是垃圾收集器中的早期策略,但是引用计数法存在一个巨大的问题,就是循环依赖,例如:

针对上图这种情况,对象ABC之间相互引用,他们的counter永远不可能为0,造成他们永远无法被回收,因此目前主流的 JVM 里都没有选用引用计数算法来管理内存。

示例:

<- 背景 ->
对象objA 和 objB 都有字段 name,两个对象相互进行引用
objA.name = objB;
objB.name = objA;

<- 问题 ->
当这两个对象objA、objB再也没有其他任何引用时,实际上他们应该要被垃圾收集器进行回收才对
但因为他们相互引用,所以导致计数器不为0,这导致引用计数算法无法通知垃圾收集器回收该两个对象

 

标签:收集器,对象,回收,理解,GC,引用,JVM,垃圾
来源: https://www.cnblogs.com/wenxuehai/p/16631896.html