垃圾回收机制(GarbageCollection)

内存管理:

  Java的内存管理很大程度就是:堆中对象的管理,也包括对象空间分配和释放。

  对象空间的分配:使用new关健字创建对象即可

  对象空间的释放:将对象赋值null即可

  垃圾回收过程:如何一种垃圾回收算法一般做两种基本事情:

          1、发现无用对象

          2、回收无用对象占用的内存空间

垃圾回收机制保证可以将“无用的对象”进行回收

  无用对象指:没有如何变量引用该对象。

  垃圾回收基本算法:引用计数法、引用可达法。

 

引用计数法:

  堆中每个对象都对应一个引用计数器,当有引用对象指向这个对象时,引用对象计数器加1;而当指向该对象的引用失效时(引用变为null),引用计数器减1,最后如果该对象的引用计数器的值为0时,则Java垃圾回收器会认为是无用对象并对其进行回收。优点是:算法简单;缺点:循环引用的无用对象无法被识别。

 

引用可达法:

  程序把所有的引用关系看做一张图,从一个节点GCROOT开始,寻找对应的引用节点,找到这个节点,当所有的引用节点寻完毕之后,剩下的节点则被认为是没有被引用到的节点,即无用节点。

 

通用的分代垃圾回收机制:

1、堆内存分为三种: 年轻代、老年代、永久代

2、创建的新对象都储存在Edent区;它是储存从未被垃圾会回收的新对象。如Edent区满时会触发一次Minor GC,清理无用对象,将有用对象复制到“Survivorl”和“SURvivor2”区中。

3、Minor GC:专门清理年轻代,它是轻量级的启动快回频繁的去启动;

4、Major GC:专门清理老年代区

5、Full GC:清理年轻代。老年代。永久代区域;成本较高,会对系统性能产生影响。

6、JVM调优和Full GC

  在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节。以下原因可能导致Full GC:

     i:老年代(Tenured)被写满;

 ii:永久代(Perm)被写满;

  iii:System。gc()被程序员调用;

 iiii:上一次GC之后Heap的各域分配策略动态变化

上一篇:解决线上频繁GC问题步骤思路


下一篇:复习Java基础(五)