Hi, On Thu, 2017-09-07 at 18:18 +0000, Stanislav Levental wrote: > 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) >
Note that with jdk10 (or whatever it's name will be) all remembered set memory will be part of the "GC" source. [0] > 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? I could not find a publicly available accurate documentation of the remembered set data structures. So unfortunately, the sources are the only information (and of course always accurate "documentation") available at this time. > - Is there a way to estimate what overhead would be and how this is > related to app memory footprint? Recently on this very list a fairly accurate worst case estimation has been attempted [1] (for 64 bit VMs). If you have questions about that calculation, feel free to ask about things that are unclear. Another answer to a similar question a bit longer out gives ideas on how to improve remembered set memory usage [2]. > - 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? Could be, but would need verification. Try bumping heap region size to 32M too. Thanks, Thomas [0] https://bugs.openjdk.java.net/browse/JDK-8176571 [1] http://mail.openjdk.java.net/pipermail/hotspot-gc-use/2017-August/0 02693.html [2] http://mail.openjdk.java.net/pipermail/hotspot-gc-use/2017-March/00 2640.html and http://mail.openjdk.java.net/pipermail/hotspot-gc-use/201 7-February/002609.html and http://mail.openjdk.java.net/pipermail/hotsp ot-gc-use/2017-January/002574.html _______________________________________________ hotspot-gc-use mailing list hotspot-gc-use@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-use