Professional Documents
Culture Documents
JVM
JVM
可达性分析算法 2. 从这些节点开始,根据引用关系向下搜索
1. 先通过根节点标记所有可达对象
2. 然后清除所有不可达对象,完成垃圾
回收
缺点:
1. 产生内存碎片
1. 通过根节点标记出所有可达对象
2. 将所有的可达对象都移动到一端
3. 清理边界外的空间,即可完成回收工作
优点:
1. 没有内存碎片
缺点:
1. 相对标记 - 清除,效率较
低
© 2006-2020 明略科技 版权所有
1. 将原有的内存空间分为两块,每次只使用其中一块
2. 在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内
存块中
复制算法
3. 清除正在使用的内存块中的所有对象,交换两个内存的角色,完成
垃圾回收
优点:
1. 没有内存碎片
2. 相比整理算法,效率更高
缺点:
1. 浪费一半内存
Old GC
特点:大约 90% 多的新建对象会被很快回收
改进版复制算法
新生代:
Eden 空间、 Survivor 空间
( From 、 To )
常见比例: 8 : 1 : 1
优点:
不再是只能使用一半内存
缺点:
需要额外空间进行分配担保
新生代 / 老年代比例: 1 : 2
1. 新生代 ( 复制 ) / 老年代(清除、整
理)
2. 串行 / 并行 / 并发
3. G1“ 全功能收集器”
重新标记:修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录
并发清除:清理删除掉标记阶段判断的已经死亡的对象
基于 Region 的堆内存布局:
1. 划分多个大小相等的独立区域( Region )
2. 遵循分代收集理论
3. region 根据需要,可以扮演不同角色
4. 不同角色的 Region 采用不同的策略回收
5. Humongous 区域,专门存储大对象
6. -XX:G1HeapRegionSize ,取值 1MB ~ 32MB
“Garbage First” :
让 G1 收集器去跟踪各个 Region 里面的垃圾堆积的
“ 价值”大小,价值即回收所获得的空间大小以及回收所需时间的经验值,维护一个优先级列表,
根据用户设定的期望停顿时间,优先回收价值收益最大的那些 Region© 2006-2020 明略科技 版权所有
G1 收集器的运作过程中的筛选回收阶段:
筛选回收须暂停用户线程:
涉及存活对象的移动
考虑过设计成并发操作,但比较复杂,考虑到 G1 只是回收一部分 Region ,
停顿时间是用户可控的,把这个特性放到之后的低延迟收集器(即 ZGC )
G1 收集器的后备预案: Full GC
在特别繁忙的场合会出现在回收过程中内存不充足的情况。当遇到这种情况时,
G1 会转入一个 Full GC 进行回收。
并发重映射:修正整个堆中指向重分配集中旧对象的所有引用
jps :虚拟机进程状况工具
jstack 命令用于生成当前虚拟机内每一条线程正在执行的方法堆栈的集合。
生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资
源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。
jmap 命令用于生成堆转储快照
S0 、 S1 : Survivor 空间比例
E : Eden 空间比例
O : Old 空间比例
M : Metaspace 比例
CCS :压缩类空间
YGC : Young GC 次数
YGCT : Young GC 时间
FGC : Full GC 次数
FGCT : Full GC 时间
GCT :所有 GC 总耗时
jinfo 的作用是实时查看和调整虚拟机各项参数。
THANKS
中国领先的一站式企业级人工智能产品与服务平台