jvm的GC

一、对象引用

1、引用计数器算法不能解决对象相互引用带来的无法释放的问题,大多数jvm采用根搜索算法。

2、引用分为Strong Reference,Soft Reference,Weak Reference,Phantom Reference

     强引用是我们最常用的如A a = new A();

     软引用SoftReference,是在内存不够的情况下,即使没有达到可回收的标准也强制回收;

     弱引用是在每次垃圾回收是都强制被回收;

     虚引用,用的很少,目的是为了在GC是获得一个通知而已。

 

 

二、垃圾收集算法

1、老年代采用“标记清理”或者“标记整理”算法。大概的过程是标记出可以清理的内存块,将内存清理出来。“标记整理”算法不是清理内存块,而是将存活的内存块向一端移动,这样能减少内存碎片的问题。这两种算法适合对象存活率较高的内存区域,所以一般放在老年代使用。

2、新生代一般采用“复制算法”。大概的过程是,将内存划分为Eden,Survivor区,将Survivor区又分为两块大小一样的分区(From Survivor和To Survivor)。运行时某一块Survivor空着,每次回收时将存活的对象完整的复制到这块Survivor分区中。该算法适合对象存活率低的内存区域使用。

 

 

三、垃圾回收器

待续

你可能感兴趣的:(jvm,GC,垃圾回收)