美文网首页
GC 过程——(一)

GC 过程——(一)

作者: vvweilong | 来源:发表于2021-06-08 18:04 被阅读0次

虚拟机初始堆状态 ,为了方便 区域划分比较小
from /to 分别占一个单元
eden占8个单元
OldGen 占20个单元
过程忽略代数计算
所有对象为强引用,都是不可回收的状态

vm_0.jpg
然后开始对象分配 新创建的对象首先分配到Eden 区域中
直到Eden区域分配满
vm_2.png
此时触发第一次GC 操作 ,为Eden空间分配不足触发的MinorGC
vm_3.png
from区域现在是空的,所以首先将Eden中的对象向 to中进行分配,分配满以后 会将其余的对象分配到老年代 OldGen中
vm_4.png
第一次GC 完成后 继续向Eden 创建对象 直到再次触发MinorGC
vm_5.png
此时首先将From区域中的元素复制到to区域(此处忽略的代数,如果有代数在默认15代的对象需要晋升到老年代中,并且此处留一个坑,是先计算代数然后放入to还是先将Eden放入to),由于此时To区域已满,所以剩余的对象会放入老年代OldGen中
vm_6.png
继续在Eden分配对象
vm_7.png
再次触发MinorGC
vm_8.png
可以看到,此时 Eden需要晋升的对象数量要大于老年代的剩余空间,这是会触发FullGC 操作来对老年代进行回收操作(此处有第二个坑,FullGC 时是否会对From区域再次进行回收,还是直接将from区域的对象复制到OldGen,看流程FullGC是前面一个MinorGC 触发的,所以理论上 已经完成了对From区域的处理)
接下来有两种情况:
一:已经无法在申请到内存空间,此时 老年代无法申请空间存放Eden中的元素 抛出OOM
二:jvm可以向系统申请空间扩展,则如下图进行空间扩展,然后将Eden晋升对象放入老年代
vm_9.png vm_10.png

相关文章

  • GC 过程——(一)

    虚拟机初始堆状态 ,为了方便 区域划分比较小from /to 分别占一个单元eden占8个单元OldGen 占20...

  • Minor GC、Major GC、Full GC

    Young GC / Minor GC young GC过程 几乎所有对象都在eden区域出生,当eden区域满了...

  • GC优化过程

    GC优化的意义 Java程序的垃圾回收由虚拟机自动进行。通常垃圾回收的时间只占程序总运行时间的一小部分,所以通常优...

  • GC 调优大纲

    一、优化前准备 GC工作原理 GC 日志 二、优化过程 确定优化目标 优化 验收优化结果

  • JVM参数设置、分析

    不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参...

  • JVM参数设置、分析

    不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参...

  • ##一次CMS GC问题排查过程(理解原理+读懂GC日志)

    一次CMS GC问题排查过程(理解原理+读懂GC日志) - iamzhongyong - ITeye技术网站 h...

  • GC Trace的输出日志方法

    在分析日志的过程中经常需要追踪GC是否异常及GC的相关信息, 可以在art/runtime/gc/heap.cc文...

  • Go GC 简介

    简单了解 GC 与 mutator 线程并发运行,允许多个 GC 线程并行运行 在 GC 的过程中同时运行的 G ...

  • 图解JVM GC过程

    1. Minor GC (1) Minor GC过程 假设现在Heap内存大小为20M,其中年轻代为10M,老年代...

网友评论

      本文标题:GC 过程——(一)

      本文链接:https://www.haomeiwen.com/subject/ypsjeltx.html