[英]G1GC - How to check if the humongous objects is a bottleneck in GC?
我的 Java 应用程序生成了以下部分日志:
[2022-04-15T08:30:22.722+0000][debug][gc,humongous ] GC(1574) Live humongous region 926 object size 3914888 start 0x0000000673c00000 with remset 2 code roots 0 is marked 0 reclaim candidate 0 type array 1
[2022-04-15T08:30:22.722+0000][debug][gc,humongous ] GC(1574) Live humongous region 942 object size 3913024 start 0x0000000675c00000 with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 1
[2022-04-15T08:30:22.722+0000][debug][gc,humongous ] GC(1574) Live humongous region 944 object size 3912448 start 0x0000000676000000 with remset 2 code roots 0 is marked 0 reclaim candidate 0 type array 1
[2022-04-15T08:30:22.722+0000][debug][gc,humongous ] GC(1574) Live humongous region 954 object size 3915320 start 0x0000000677400000 with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 1
据我了解,这意味着巨大的区域最多为954,如果一个区域占用2mb,那么巨大的区域最多占用2GB。 我对么?
有没有更好的方法/工具来寻找巨大的物体?
回答我的问题:
Live humongous region 926
这意味着活的巨大物体占据了 926 个区域。
object size 3915320
这意味着总巨大对象需要 3,915,320(Byte)
巨大的物体并不意味着它很糟糕。 有时,您的应用程序级缓存可能会作为巨大的对象保存在老一代中。
每次 GC 之后,都会显示释放了多少个区域的信息:
[<timestamp>][info ][gc,heap ] GC(14) Eden regions: 111->0(1217)
[<timestamp>][info ][gc,heap ] GC(14) Survivor regions: 12->11(16)
[<timestamp>][info ][gc,heap ] GC(14) Old regions: 13->15
[<timestamp>][info ][gc,heap ] GC(14) Humongous regions: 12->12
从这条消息中,您可以了解它使用了多少个巨大的区域,并决定是否需要对其进行调整。
源代码: https://github.com/openjdk/jdk11u/blob/master/src/hotspot/share/gc/g1/g1CollectedHeap.cpp#L4537
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.