How to identify individual object's location in JVM heap space
thomas.schatzl at oracle.com
Fri Aug 23 01:11:58 PDT 2013
On Fri, 2013-08-23 at 09:46 +0800, Lijie Xu wrote:
> I think there is a way to know the address of each object and address
> boundary of each space, since GC algorithms have methods to scan
> objects in a specific space.
> I also noticed that there are some address information generated by
> +PrintGCDetails about each space. For example,
If you have object addresses you can use the information from -XX:
+PrintGCDetails to infer its location.
> def new generation total 153600K, used 152935K [0x14710000,
> 0x1edb0000, 0x1edb0000)
The young generation has a total size of 153M, where slightly less are
used; the three values next are reservation start address, upper
committed address, and reservation end address.
> eden space 136576K, 100% used [0x14710000, 0x1cc70000, 0x1cc70000)
> from space 17024K, 96% used [0x1dd10000, 0x1ed09f60, 0x1edb0000)
> to space 17024K, 0% used [0x1cc70000, 0x1cc70000, 0x1dd10000)
Lowest address, upper used and highest address for the eden (nursery)
and from/to survivor spaces.
> tenured generation total 341376K, used 341220K [0x1edb0000,
> 0x33b10000, 0x33b10000)
Same as above for the old (tenured) generation.
> the space 341376K, 99% used [0x1edb0000, 0x33ae9160, 0x33ae9200,
The old generation is a single blob of memory, no further split into
> compacting perm gen total 12288K, used 188K [0x33b10000, 0x34710000,
> the space 12288K, 1% used [0x33b10000, 0x33b3f2c0, 0x33b3f400,
> ro space 10240K, 42% used [0x37b10000, 0x37f50348, 0x37f50400,
> rw space 12288K, 54% used [0x38510000, 0x38b906f0, 0x38b90800,
Same information for the permanent generation as above.
> What's the exact meaning of these multiple address?
(You are using serial gc; other collectors have different output btw).
More information about the hotspot-gc-dev