MemoryPoolMXBean returns wrong amount of memory for Eden space with large G1 heap region size.
When defined -XX:G1HeapRegionSize=1m example app works as expected and returns some value for used space. If we use -XX:G1HeapRegionSize=4m or grater, getUsage().getUsed() returns 0.
Example attached. Output with different G1HeapRegionSize is:
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=1m Usage
Commited : 13631488 Init : 13631488 Max : -1 Used : 2097152
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=2m Usage
Commited : 14680064 Init : 14680064 Max : -1 Used : 2097152
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=4m Usage
Commited : 16777216 Init : 16777216 Max : -1 Used : 0
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=16m Usage
Commited : 33554432 Init : 33554432 Max : -1 Used : 0
Checked on Win x64 and Linux x64.
When defined -XX:G1HeapRegionSize=1m example app works as expected and returns some value for used space. If we use -XX:G1HeapRegionSize=4m or grater, getUsage().getUsed() returns 0.
Example attached. Output with different G1HeapRegionSize is:
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=1m Usage
Commited : 13631488 Init : 13631488 Max : -1 Used : 2097152
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=2m Usage
Commited : 14680064 Init : 14680064 Max : -1 Used : 2097152
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=4m Usage
Commited : 16777216 Init : 16777216 Max : -1 Used : 0
cmv@cmv:~/tmp$ ~/reps/jdk/9/b91/bin/java -XX:+UseG1GC -XX:G1HeapRegionSize=16m Usage
Commited : 33554432 Init : 33554432 Max : -1 Used : 0
Checked on Win x64 and Linux x64.