jvm垃圾回收机制

一:是否为垃圾

1,判断为垃圾的标准

  当没有被任何对象引用的情况下

2.判断是垃圾的算法

  引用计数算法

  可达性算法

3.引用计数算法

  

  

  举例:

  父类有一个对子类的引用,子类又引用了父类

4.可达性算法

  

  

二:垃圾回收算法

1.标记-清除算法【remark-weep】

  

  图示:

  

   缺点:

  标记清楚不需要对象的移动,造成不连续的碎片化。当程序运行,需要分配较大的空间时,没有足够大的连续空间。会触发另一次GC

2.复制算法【copying】

  

   适用:

  适用于对象存活率低的场景,例如年轻代

  优点:

  

3.标记整理算法【compacting】

  

   图示:

  

  优点:

  

4.分代收集算法

  组合拳

  Minor Gc:

   发生在年轻代的gc,采用复制算法

  Full Gc:

   老年代的回收

5.年轻代

  目的:尽快的收集掉生命周期短的对象

  

  

  minor gc的过程:

  发生一次gc,存活的对象被放到survivor中,然后清除eden区的from区

  发生第二次gc,会将eden和from存活的对象拷贝到to区,然后清除eden和from区

6.晋升到老年代

  经历一定次数的Minor Gc的存活的对象

  年轻代放不下的对象

   新生的大对象

7.常用的调优参数

  

8.触发Full Gc

  

三:年轻代常见垃圾回收器

1.JVM运行模式

  server

  client

  区别:

  client启动较快,但是稳定之后,程序运行server更快,因为一个使用的是重量级的,对程序采用更多的优化

   

2.垃圾回收器之间的关系

  

3.Serial收集器

  复制算法

  

4.ParNew收集器

  复制算法

  

5.Parallel Scavenge

  复制算法

  

四:老年代常见垃圾回收器

 1.Serial Old

  标记整理算法

  

2.Parallel Old

  标记整理算法

  

3.CMS  

  标记清除算法

  

 4.g1

  复制 + 标记整理算法

  

五:引用

1.软引用

  

2.弱引用、

  

3.需引用

  

4.类

  

  

原文地址:https://www.cnblogs.com/juncaoit/p/13381694.html