JVM - 垃圾回收算法

JVM - 垃圾回收算法

这里只介绍垃圾回收算法的思想,不关注具体的算法细节
垃圾回收算法发展已经有很长的历史

问题一、怎么判定一个对象是垃圾对象?

解决这个问题的核心其实就是判定该对象有没有正在使用?

  1. 引用计数算法
  • 被引用了就计数加1.
  • 被释放了就计数就减1.
  • 如果计数是0,就说明没有被引用,就是垃圾对象,可以回收
    最大的问题就是循环引用的问题.

实践测试:我们的Java虚拟机是否也不能回收循环引用的问题?

  1. 可达性分析算法

GC Root到达对象没有路径就是垃圾对象


image.png
标记清除算法

这是垃圾回收算法最基础的算法

image.png

总结下:

  1. 标记和清除都需要遍历对象,效率不是很高
  2. 清除之后会导致很多内存碎片问题,使得下一次内存分配管理成本很高
复制算法

为了解决内存碎片的问题


image.png

总结下:

  1. 内存的利用效率变低,必须有额外内存作为备用
  2. 如果回收的对象比较少,每次拷贝的对象很消耗性能
  3. 适用垃圾比较少的情况
标记整理算法

结合标记清除和复制算法优点的优化算法

image.png

问题:那那种算法适合JVM的垃圾收集器?

  1. 主要看对象存活时间
  2. JVM根据对象存活时间不同采用分代回收··
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容