前言
本篇博客博主将介绍jvm中的GC机制,坐好板凳发车啦~~
一.GC相关
1.1回收栈内存
对于虚拟机栈,本地方法栈这部分区域而言,其生命周期与相关线程相关,随线程而生,随线程而灭。并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者线程结束时,内存就自然跟着线程回收了。
1.2回收堆内存与方法区内存
我们所讲的有关内存分配和回收关注的为Java堆与方法区这两个区域
Java堆中存放着几乎所有的对象实例,垃圾回收器在对堆进行垃圾回收前,首先要判断这些对象哪些还存活,哪些已经“死去”。
1.3死亡对象的判断
1.引用计数法
2.可达性分析算法
对象5-7之间虽然彼此还有关联,但是它们到GC Roots是不可达的,因此它们会判定为可回收对象。
在Java语言中,可作为GC Roots 的对象包含下面几种:
1.虚拟机栈(栈帧中的本地变量表)中引用的对象;
2.方法区中类静态属性引用的对象;
3.方法区中常量引用的对象;
4.本地方法栈中JNI(Native 方法)引用的对象。
1.4垃圾回收的指导思想
1.4.1标记-清除思想
“标记-清除”算法是最基础的收集算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象
缺点:
1.效率问题:标记和清除这两个过程效率都不高;
2.会产生内存碎片化问题。
1.4.2复制算法思想
1.4.3标记-整理算法思想
1.4.4分代算法思想
垃圾回收过程:
1.5Minor GC 和 Full GC
1.6垃圾收集器
如果说上面的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。
1.6.1为什么有这么多垃圾回收器
1.6.2CMS收集器
1.6.3G1收集器
结果如下:
1.7总结:一个对象的一生
尾语
这篇博客到这里就结束啦,希望可以给大家带来帮助~~