Search code examples
javagarbage-collectionjvm-hotspotheap-dump

How can I know whether a Java object is in tenure or eden space from heap dump


I have a Hotspot JVM heap dump and I tried to find out whether an object is live in tenure space, eden space, or survivor space, but I could not.

Appreciate if someone can help me.


Solution

  • I don't think you can. From this forum post,

    sorry, bad news, the heap dump neither contains the info about the space the object is in

    Looking at the contents of the java heap dumps from this page seems to confirm that the heap dump does not contain generation info,

    HEAP DUMP BEGIN (39793 objects, 2628264 bytes) Wed Oct 4 13:54:03 2006
    ROOT 50000114 (kind=<thread>, id=200002, trace=300000)
    ROOT 50000006 (kind=<JNI global ref>, id=8, trace=300000)
    ROOT 50008c6f (kind=<Java stack>, thread=200000, frame=5)
    :
    CLS 50000006 (name=java.lang.annotation.Annotation, trace=300000)
        loader        90000001
    OBJ 50000114 (sz=96, trace=300001, class=java.lang.Thread@50000106)
        name        50000116
        group        50008c6c
        contextClassLoader    50008c53
        inheritedAccessControlContext    50008c79
        blockerLock    50000115
    OBJ 50008c6c (sz=48, trace=300000, class=java.lang.ThreadGroup@50000068)
        name        50008c7d
        threads    50008c7c
        groups        50008c7b
    ARR 50008c6f (sz=16, trace=300000, nelems=1, 
         elem type=java.lang.String[]@5000008e)
        [0]        500007a5
    CLS 5000008e (name=java.lang.String[], trace=300000)
        super        50000012
        loader        90000001