一次完整的gc流程

一次完整的gc流程,第1张

1、取出闭祥记录本登记使用者和开始时间。

2、打开净化器上的载气开关阀,然后检查是否漏气,保证气密性良好。

3、调节轿孙搏肿瘤量为适当值。

4、调节分流阀是分流流量为实验所需的流量,柱流量即为总流量减去分流量。

5、调节尾吹流量控制阀使尾吹流量为适当值,并使尾吹流量与柱流量之和不低于载气总流量。

6、打开净化器的空气、氢气开关阀,调节空气凯友、氢气流量为适当值。

7、根据实验需要设置柱温、进样口温度和FID检测器温度。

8、FID检测器温度达到150摄氏度以上,按FIRE键点燃FID检测器火焰。

9、设置FID检测器灵敏度和输出信号衰减。

10、如果基线不在零位,调节调零电位器A使FID输出信号在纪录仪或积分仪零位附近。待所设参数达到设置时,即可进行分析。

11、但所设参数达到设置时即可进样分析。

初始状态,假设整个堆内存大小为20M,其中凯携老年代10M,新生代10M,新生代中Eden区6M,两个Survivor区各2M。大多数情森孙腔况下,新创建的对象首先都会尝试在Eden区分配(初始年龄为0),随着程序运行,对象不断被创建,Eden区空间快要被占满了。此时,一个新的对象(1M)申请分配内存,Eden区没有此衫足够的空间来给这个对象分配内存,如图所示:

这时候会触发一次Minor GC,把Eden区中还存活的对象转移到From区(年龄+1为1),其他对象则视为垃圾被清理掉。然后在Eden区中给新创建的那个对象分配空间。

这时会再次触发Minor GC,把Eden区和From区中存活的对象转移到To区(年龄+1为2),清理掉剩下的垃圾对象,然后在Eden区给新对象分配内存:

如果某个(些)对象(原来在年轻代中存活的对象或者新创建的对象)需要被移动到老年代中,而老年代中没有足够空间容纳这个(些)对象,那么会触发一次Full GC,Full GC会对整个堆进行清理,如果Full GC后还是无法在老年代中给这个(些)对象分配空间,那么JVM会抛出OutOfMemoryError,即OOM。

https://www.jianshu.com/p/314272e6d35b

https://blog.csdn.net/u011069294/article/details/107346634

连续gc需要在eden区分配内存。

1、大对象直接进入到老年代。

2、小对象先在eden区分配内存,当eden满了后,触发中脊晌一次Minor GC,清理eden区域。

3、存活下来的对象进入到survivor区域,年龄+1。

4、当卖锋老年代满了后触发一次Full GC。

主要发展

Java有了GC,就不需要程序员去人工释放内存空间。当Java虚拟机发觉内野誉存资源紧张的时候,就会自动地去清理无用变量所占用的内存空间。当然,如果需要,程序员可以在Java程序中显式地使用System.gc()来强制进行一次立即的内存清理。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8212954.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存