JVM垃圾回收(GC)

2017-10-19  本文已影响12人  Dapengyou

判断哪些对象是垃圾

引用的类型

最常用到的是强引用和弱引用

垃圾回收算法

如图,从根节点引用A,A引用C,则B为不可达点,进行扫描,进入标记阶段,标记B,此时B为垃圾对象,接下来进入清除阶段,扫描整个空间并清除未标记的对象

缺点就是容易产生内存碎片,碎片太多可能会导致后续过程中需要为大对象分配空间时无法找到足够的空间而提前触发新的一次垃圾收集动作。

如图,从根节点引用A,将A放置在另一块空闲的内存中,B为不可达点,跳过,A引用C,将A放置在另一块空闲的内存中,当遍历完成后,将原来的内存清空,只保留了新的内存。

优点:对象少时,效率极高

缺点:需要一块内存

如图,进行全局扫描,标记出可回收的对象,进入清除阶段,将可回收对象清除,将所有的存活对象向左端空闲处移动并更新对应空闲指针

触发回收

  1. Java虚拟机无法再为新的对象分配内存空间
  2. 手动调用System.gc()方法(强烈不推荐)
  3. 低优先级的GC线程,被运行时就会执行GC
上一篇 下一篇

猜你喜欢

热点阅读