G1 uses extra memory for RSets

Stanislav Levental stanislav.levental at gmail.com
Thu Sep 7 18:18:16 UTC 2017


Hello,

I have few questions regarding G1 RSets.

We are running java on a 30Gb machnie with Xmx=20Gb, howewer, java managed
to use extra 7.5Gb above that 20Gb. According to NMT, the most significant
sources of memory consumptions are:

Java Heap (reserved=20971520KB, committed=20971520KB)
                            (mmap: reserved=20971520KB,
committed=20971520KB)

GC (reserved=3021667KB, committed=3021667KB)
                            (malloc=2210659KB #61926090)
                            (mmap: reserved=811008KB, committed=811008KB)

Internal (reserved=2358976KB, committed=2358976KB)
                            (malloc=2358944KB #1205678)
                            (mmap: reserved=32KB, committed=32KB)

Assuming that most of the memory is claimed by G1, I've added an option to
track what is RSet consumption stat is:

Current rem set statistics
  Total per region rem sets sizes = 2803150K. Max = 2448K.
         128K (  0.0%) by 13 Young regions
          76K (  0.0%) by 7 Humonguous regions
        8874K (  0.3%) by 898 Free regions
     2794071K ( 99.7%) by 1642 Old regions
   Static structures = 290K, free_lists = 11539K.
    2878842478 occupied cards represented.
            0 (  0.0%) entries by 13 Young regions
           47 (  0.0%) entries by 7 Humonguous regions
            0 (  0.0%) entries by 898 Free regions
     2878842431 (100.0%) entries by 1642 Old regions
    Region with largest rem set =
75:(O)[0x00000002e5800000,0x00000002e6000000,0x00000002e6000000], size =
2448K, occupied = 1687K.
  Total heap region code root sets sizes = 114K.  Max = 29K.
           0K (  0.2%) by 13 Young regions
           0K (  0.1%) by 7 Humonguous regions
          14K ( 12.2%) by 898 Free regions
         100K ( 87.5%) by 1642 Old regions
    3010 code roots represented.
            0 (  0.0%) elements by 13 Young regions
            0 (  0.0%) elements by 7 Humonguous regions
            0 (  0.0%) elements by 898 Free regions
         3010 (100.0%) elements by 1642 Old regions
    Region with largest amount of code roots =
147:(O)[0x0000000309800000,0x000000030a000000,0x000000030a000000], size =
29K, num_elems = 1.
, 0.6920868 secs]

Looks like half of this 7Gb extra is cards and bitmaps for RSet. So my
 questions are:
 - Is there any information about internal implementation details available
anywhere?
 - Is there a way to estimate what overhead would be and how this is
related to app memory footprint?
 - In our app it's mostly strings and we are using strings deduplication,
could it be the problem, since it creates extra references between regions,
increasing footprint for RSet?

Thanks,
Stas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-gc-use/attachments/20170907/81e224d5/attachment.html>


More information about the hotspot-gc-use mailing list