GC

对象不被引用

判断垃圾的算法:

1.引用计数算法:

  • 1)通过判断对象的引用数量来判断对象是否可以被回收。 2)每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1。3)引用对象为0的实例可以被垃圾回收。
  • 优点:执行效率高,对程序执行影响小。缺点:无法检测循环引用的情况,内存泄漏

2.可达性分析算法:

  • 1)通过对象的引用链是否可达来决定对象是否可以被回收,GCRoot
    GCRoot:虚拟机栈中引用的对象,方法区中的常量引用的对象,方法区中类静态属性引用的对象,本地方法栈中JNI(Native方法)的引用对象,活跃线程的引用对象,

垃圾回收算法:

  • 标记-清除算法:标记:从根节点开始扫描,对存活对象进行标记。清除:对堆内存中的对象进行线性遍历,回收不可达的对象的内存。(碎片化)
  • 复制算法:分为对象面和空闲面,对象在对象面创建,存活对象从对象面复制到空闲面,将对象面内存清理掉(适用对象存活率低的场景,年轻代)
  • 标记-整理算法:标记:从根节点开始扫描,对存活对象进行标记。整理:移动所有存活对象,且按照内存地址依次排列,回收末端地址之后的内存。(避免内存不连续,不用使用两块内存互换,适用于存活率高的场景)
  • 分代收集算法:垃圾回收组合,对象生命周期不同划分区域采用不同的垃圾回收算法,提高JVM回收效率。(分类:新生代收集:Minor GC、老年代:FullGC)
    年轻代:Eden区和两个survivor区

你可能感兴趣的:(GC)