垃圾收集器与内存分配策略
2020-05-09 12:32:43 0 举报
AI智能生成
垃圾收集器与内存分配策略
作者其他创作
大纲/内容
对象已经死了吗
引用计数法
原理:对象添加引用计数器,被引用+1 失效-1 回收值为0的对象
缺点:难解决对象之间循环引用
应用:普遍,但jvm未用
可达性分析算法
GC Roots 为起点按照引用链搜索,搜索不到的就是可回收的
GC Roots
虚拟机栈(栈帧中的本地变量表)中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNI(native方法)引用的对象
关于引用
分为:强引用、软引用、弱引用、虚引用
生存还是死亡
通过finalize()回收
回收方法区
特点:性价比低
回收内容:废弃常量和无用的类
废弃常量:判断是否被引用,没应用就回收
废弃无用类需满足的三个条件:
该类在堆中的所有对象已被回收
加载该类的ClassLoader已被回收
该类的java.lang.Class对象没有任何引用,无法通过反射获取该类
垃圾收集算法
标记-清除算法
原理:先标记,后清除
缺点:产生大量不连续的内存碎片
复制算法
标记-整理算法
分代收集算法
HotSpot的算法实现
枚举根节点
安全点
安全区域
垃圾收集器
收集器
Serial收集器
单线程
垃圾回收时需停止工作线程
ParNew收集器
Serial的多线程版本
Server模式下虚拟机首选新生代收集器
与CMS配合工作
Parallel Scavenge 收集器
新生代收集器
复制算法多线程收集
吞吐量优先
配合GC自适应调节策略
Serial Old 收集器
Serial收集器的老年代版本
单线程
标记-整理算法
给client模式下的虚拟机使用
Parallel Old 收集器
Parallel Scavenge 收集器的老年代版本
多线程+标记-整理算法
CMS 收集器
目标:缩短回收停顿时间
基于:标记-清除算法
过程:初始标记->并发标记->重新标记->并发清除(初始标记和重新标记需要stw)
在并发清理时工作线程还在进行,会产生浮动垃圾
G1收集器
server端垃圾回收器
GC日志
垃圾收集器参数总结
内存分配与回收策略
对象优先在Eden分配
大对象直接进入老年代
长期存活的对象将进入老年代
动态对象年龄判定
空间分配担保
自由主题
收藏
收藏
0 条评论
下一页