写点什么

JVM 垃圾回收原理

用户头像
梧桐
关注
发布于: 2020 年 12 月 21 日

JVM 的垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。


GC 的垃圾回收判断算法

1、引用计数法

每个对象都有一个计数器,当有引用指向该对象时计数器加 1,当引用失效时计数器减 1。用对象计数器是否为 0 来判断对象是否可被回收。


2 可达性分析算法

通过 GC ROOT 的对象作为搜索起始点,向下搜索,路径被称为引用链。

通过判断对象是否有到达引用链的路径来决定对象是否可被回收


垃圾回收算法

1、标记-清除算法

先把内存区域中的这些对象进行标记,哪些属于可回收标记出来,然后把这些垃圾拎出来清理掉。


复制算法

复制算法是为了解决标记清除算法的内存碎片问题。它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。


标记-整理算法

标记-整理算法标记过程仍然与标记-清除算法一样,但内存清理时不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,再清理掉端边界以外的内存区域。


分代收集算法

虚拟机将堆内存划分为新生代、老年战和永久代。

新生代(Young)

新生成的对象优先存放在新生代中,新生代对象朝生夕死,存活率很低

老年代(OldGenerationn)

在新生代中经历了多次(具体看虚拟机配置的阀值)GC 后仍然存活下来的对象会进入老年代中。老年代中的对象生命周期较长,存活率比较高,在老年代中进行 GC 的频率相对而言较低,而且回收的速度也比较慢。

永久代(PermanentGenerationn)

永久代存储类信息、常量、静态变量、即时编译器编译后的代码等数据,对这一区域而言,Java 虚拟机规范指出可以不进行垃圾收集,一般而言不会进行垃圾回收。


用户头像

梧桐

关注

还未添加个人签名 2018.07.06 加入

还未添加个人简介

评论

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