垃圾收集
2019-03-19 12:09:23 33 举报
AI智能生成
垃圾收集器的详细内容,包括内存分配,垃圾回收等的详细内容
作者其他创作
大纲/内容
内存空间分布
1.8之前
运行时数据区
程序计数器
虚拟机栈
本地方法栈
堆
方法区
运行时常量池
字面量
子主题
符号引用
1.8之后
运行时数据区
程序计数器
是什么?
栈
虚拟机栈
特点
栈帧
局部变量表
异常
StackOverFlowError
OutOfMemoryError
本地方法栈
堆
可扩展
元空间
为什么要换成元空间?
直接内存
对象分配
对象分配在哪里
堆上分配
怎样进入老年代
长期存活的对象
动态对象年龄判断
栈上分配
什么是JIT
为什么需要JIT?
什么是JIT?
为什么要进行栈上分配?
逃逸分析
用途
缺点
谁可以在栈上分配?
怎么分配
栈上分配的基础
分离对象或标量替换
TLAB分配
为什么需要?
怎么用?
老年代分配
如何分配
虚拟机如何创建对象
何时会创建对象?
内存分配
内存分配方式
指针碰撞
空闲列表
为什么需要它?
怎么实现?
怎么分配
并发分配同一块空间怎么办?
CAS失败重试
TLAB
初始化
设置对象头
对象自身运行时数据
类型指针
真的需要指针吗?
句柄访问
直接指针访问
垃圾回收
哪里需要回收?
回收谁?
怎样是已死对象?
怎么判断引用不可达?
GC Roots 碰到的难点
怎么处理呢?
OopMap遗留问题
可达性分析碰到的难点
何时回收?
新生代空间不足
老年代空间不足
System.gc()
如何回收?
如何开始GC
安全点
在安全点处才能开始GC
安全点的选定
解决了如何进入GC的问题
怎么做到的?
安全区域
为什么需要安全区域?
怎么回收?
收集器
新生代收集器
serial收集器
特点
怎么工作?
使用场景
ParNew收集器
特点
怎么工作?
使用场景
Parallel Scavenge收集器
特点
吞吐量
怎么工作?
使用场景
老年代收集器
serial old 收集器
特点
怎么工作?
使用场景
parallel old收集器
特点
怎么工作?
使用场景
CMS 收集器
特点
怎么工作?
缺点
浮动垃圾
concurrent mode failure
空间碎片
G1 收集器
特点
分区
对可达性分析的影响
如何避免全堆扫描?
可预测的停顿时间模型
怎么实现?
工作流程
ZGC收集器
特点
垃圾收集算法
标记-清除算法
工作流程
缺点
复制算法
工作流程
为什么需要复制算法?
缺点
标记-整理算法
为什么需要标记-整理
工作流程
缺点
手动回收
System.gc()
怎么打印gc日志?
手动gc和jvm GC差异?
GC分类
minor gc
full gc /major gc
GC日志分析
简介
0 条评论
下一页