JVM之GC算法
一、什么是GC JVM GC是:JVM的垃圾回收算法,现在的JVM基本采用分代收集,Young区收集平凡,Old区收集较少,Perm(永久代)基本不回收;JVM进行GC时大部分是对新生代的回收,少量的全局回收。 GC按照作用的区域分为: Minor GC:作用于新生代 Major GC(Full GC):作用于老年代,偶尔也会回收老年代和永久代。 二、如何定位垃圾 1、引用计数法 引用计数算法很简单,它实际上是通过在对象头中分配一个空间来保存该对象被引用的次数。如果该对象被其它对象引用,则它的引用计数加一,如果删除对该对象的引用,那么它的引用计数就减一,当该对象的引用计数为0时,那么该对象就会被标记为垃圾对象。 第10行 str引用了“ABC” 则“ABC”的计算器等于1。第11行str释放了该引用,所以“ABC”的计数器就减一。 优点:实现简单,判定高效,可以很好解决大部分场景的问题。 缺点: 很难解决对象之间相互循环引用的问题,当两个对象不再被访问时,因为相互引用对方,导致引用计数不为0; 开销较大,频繁且大量的引用变化,带来大量的额外运算;主流的JVM都没有选用引用计数算法来管理内存; 2、可达性分析法(根搜索算法) 可达性分析法:通过一系列"GC Roots"对象作为起始点,开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC