写点什么

JVM 垃圾回收原理

用户头像
南宫煌
关注
发布于: 2020 年 08 月 05 日

作业:

  • 请简述 JVM 垃圾回收原理。

JVM 垃圾回收算法


Java 堆中存放着几乎所有的对象实例,回收之前要确定其是否存活着,有两种思路可以判断对象存活


  • 引用计数算法


如果有其他对象对其引用,则计数器加一,引用失效的时候,计数器减一。计数器为 0 时则可以被回收。


弊端:无法解决对象互相引用的问题,他们是内存中的孤岛,但却无法被回收 例如: A.a = B;B.b = A


  • 可达性分析算法


通过一系列称为GC Roots的对象作为起始点,然后向下搜索,走过的路径为引用链,如果一个对象到 GC Roots 没有任何引用链,则说明此对象是不可达(不可用)的。


固定的 GC Roots 对象

l  在虚拟机栈(局部变量表)中引用的对象(局部变量、临时变量)

l  在方法区类静态属性引用的对象(Java 类的引用类型静态变量)

l  在方法区常量引用的对象(字符串常量池里的引用)

l  在本地方法栈中 JNI 引用的对象

l  JVM 内部的引用,如(基本数据类型对应的 Class 对象、一些常驻的异常对象以及系统类加载器)

l  所有被同步锁(synchronized 关键字)持有的对象


JVM 分代收集理论假说

弱分代假说:绝大多数对象都是朝生夕死的

强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡

跨代引用假说:跨代引用相对于同代引用来说仅占极少数


用户头像

南宫煌

关注

还未添加个人签名 2019.10.08 加入

还未添加个人简介

评论

发布
暂无评论
JVM 垃圾回收原理