JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

1.其中Perm gen在jdk8以上被元空间取代。

2.新生代(Eden Space, Survivor0 space, Survivor 1 space)。新生代和old gen 组成堆。其他都是非堆空间。

3.非堆空间(Code Cache,Jvm Stack,Local Method Statck,Perm gen/Metaspace, Compressed Class Space)

JVM内存管理(整理)及垃圾回收算法 

通过java代码获取jvm信息和系统信息

查看jvm的full gc的频率

什么时候对象进入老年代?什么时候触发Full GC?如何减少长时间的 GC 停顿?

 

当年轻代过小时,对象会过早地提升到老年代。从老年代收集垃圾比从年轻代收集垃圾要花费更多的时间。因此,增加年轻代的大小有可能减少长时间的 GC 停顿。可以通过设置两个 JVM 参数之一来增加年轻一代的大小:

-Xmn :指定年轻代的大小。-XX:NewRatio :指定年轻代相对于老年代的大小比例。例如,设置 -XX:NewRatio=2 表示年轻代与老年代之间的比率为 1:2。年轻代的大小将是整个堆的 1/3。因此,如果堆大小为 2 GB,则年轻代大小将为 2G / 3 = 667 MB。

GC 算法对 GC 停顿时间有很大的影响。如果你是 GC 专家或打算成为一个(或你的团队中的有人是 GC 专家),你可以调整 GC 参数配置以获得最佳 GC 停顿时间。如果你没有大量的 GC 的专业知识,那么我建议使用 G1 GC 算法,因为它有自动调节的能力。在 G1 中,可以使用系统属性 -xx:MaxGCPauseMillis来设置 GC 预期最大停顿时间。例如:

-XX:MaxGCPauseMillis=200
按照上面的例子,最大 GC 停顿时间设置为 200 毫秒。这是一个软目标,JVM 将尽力实现它。

关于JVM参数-XX:SurvivorRatio的理解
JVM参数中有一个比较重要的参数SurvivorRatio,它定义了新生代中Eden区域和Survivor区域(From幸存区或To幸存区)的比例,默认为8,也就是说Eden占新生代的8/10,From幸存区和To幸存区各占新生代的1/10

一次JVM GC长暂停的排查过程

 

posted on 2023-11-30 15:52  yuluoxingkong  阅读(6)  评论(0编辑  收藏  举报