RFR (S) 8073532: jmap -heap fails after generation array removal
Mikael Gerdin
mikael.gerdin at oracle.com
Fri Feb 20 11:55:46 UTC 2015
Hi all,
Please review this small fix to an issue introduced by JDK-8061802.
The API in the SA is pretty strange, but a "Field" object basically only
encodes the type and offset of a non-static field, so to get what the
field points to you must supply "this.addr", which is the base address
of the containing object.
An alternate fix could have been to call getAddress(addr), but a quick
look at the other usages of AddressField seems to suggest that
getValue(addr) is the preferred way.
Webrev: http://cr.openjdk.java.net/~mgerdin/8073532/webrev.0/
Bug: https://bugs.openjdk.java.net/browse/JDK-8073532
Testing:
Ran jdk/test/sun/tools/jmap/heapconfig/JMapHeapConfigTest.java with
-XX:+UseSerialGC before/after fix.
Ran "jmap -heap" and inspected the output to verify that the correct
output is produced with the fix applied:
== Before fix ==
Heap Usage:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.tools.jmap.JMap.runTool(JMap.java:201)
at sun.tools.jmap.JMap.main(JMap.java:130)
Caused by: sun.jvm.hotspot.types.WrongTypeException
at
sun.jvm.hotspot.types.basic.BasicField.getAddress(BasicField.java:246)
at
sun.jvm.hotspot.types.basic.BasicFieldWrapper.getAddress(BasicFieldWrapper.java:131)
at
sun.jvm.hotspot.memory.GenCollectedHeap.getGen(GenCollectedHeap.java:79)
at sun.jvm.hotspot.tools.HeapSummary.run(HeapSummary.java:89)
at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:49)
... 6 more
== With fix ==
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 157941760 (150.625MB)
used = 14044472 (13.393852233886719MB)
free = 143897288 (137.23114776611328MB)
8.892184055692427% used
Eden Space:
capacity = 140443648 (133.9375MB)
used = 14044472 (13.393852233886719MB)
free = 126399176 (120.54364776611328MB)
10.000076329546781% used
From Space:
capacity = 17498112 (16.6875MB)
used = 0 (0.0MB)
free = 17498112 (16.6875MB)
0.0% used
To Space:
capacity = 17498112 (16.6875MB)
used = 0 (0.0MB)
free = 17498112 (16.6875MB)
0.0% used
tenured generation:
capacity = 350945280 (334.6875MB)
used = 0 (0.0MB)
free = 350945280 (334.6875MB)
0.0% used
/Mikael
More information about the hotspot-gc-dev
mailing list