簡體   English   中英

G1GC - 如何檢查巨大的對象是否是 GC 的瓶頸?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM