首页 > 其他 > 详细

JVM 垃圾回收

时间:2021-02-28 21:56:10      阅读:21      评论:0      收藏:0      [点我收藏+]

1. 如何判断垃圾可以回收

可达性分析算法:扫描堆中的对象,沿着GC Root对象为起点的引用链看能否找到该对象,如果能则其仍然存活,不能则判定为可回收的对象。

 

2. 五种引用(由强至弱)

  • 强引用:传统的正常引用,只要引用关系还在,就不会被回收
  • 软引用:在系统将要内存溢出前,会把这些对象进行二次回收,如果回收后还是没有足够内存,才会抛出内存溢出异常
  • 弱引用:当垃圾回收器开始工作时,就会回收弱引用关联的对象
  • 虚引用:为一个对象设置虚引用,在该对象被回收是会收到一个系统通知,是否有虚引用不会对其生存时间有影响。虚引用Cleaner,在ByteBuffer对象被回收后,其占用的直接内存地址还在,此时把虚引用Cleaner放到引用队列,执行Unsafe.freeMemory来释放直接内存。
  • 终结器引用(补):当对象被垃圾回收时,把对象加入引用队列(入队等待),之后通过终结器引用找到待回收的对象,调用对象的finalize()方法。注:由于处理引用队列线程优先级很低,所以不推荐用finalize()会回收对象。

 

3. 垃圾回收算法

(1)标记清除:先标记,然后清除,清除时就是把对象的起终地址记入空闲地址队列

优点:速度快  缺点:产生内存碎片

(2)标记整理:先标记,再把剩余的对象紧凑到一起

优点:解决了外部碎片  缺点:速度较慢

(3)标记复制:将内存划分出大小相等的两块,其中一块为原始,一块空白,把存活的对象复制到空白区(移动堆指针,按序分配无碎片)

优点:无内存碎片,高效  缺点:占用太多空间

 

JVM 垃圾回收

原文:https://www.cnblogs.com/Kinghao0319/p/14460136.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!