jmap -heap:format=b <pid> doesn't scale - if the target VM has a large heap (even 128MB) then jmap can throw an OOM. Attached is a sample stack trace.
This bug is submitted with a view to re-examining the use of the ByteArrayOutputStream - it might be better to use a temporary file as the size of the target VM's heap isn't known in advance and could be very large.
> Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
> at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:70)
> at java.io.DataOutputStream.writeInt(DataOutputStream.java:182)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeObjectID(HeapHprofBinWriter.java:661)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeInternalReferenceField(HeapHprofBinWriter.java:464)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter$2.doOop(AbstractHeapGraphWriter.java:155)
> at sun.jvm.hotspot.oops.ObjArray.iterateFields(ObjArray.java:55)
> at sun.jvm.hotspot.oops.Oop.iterate(Oop.java:112)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter.writeObjectFields(AbstractHeapGraphWriter.java:146)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeObjectArray(HeapHprofBinWriter.java:459)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter$1.doObj(AbstractHeapGraphWriter.java:53)
> at sun.jvm.hotspot.oops.ObjectHeap.iterateLiveRegions(ObjectHeap.java:415)
> at sun.jvm.hotspot.oops.ObjectHeap.iterate(ObjectHeap.java:231)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter.write(AbstractHeapGraphWriter.java:34)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:349)
> at sun.jvm.hotspot.tools.JMap.writeHeapHprofBin(JMap.java:134)
> at sun.jvm.hotspot.tools.JMap.run(JMap.java:71)
> at sun.jvm.hotspot.tools.Tool.start(Tool.java:204)
> at sun.jvm.hotspot.tools.JMap.main(JMap.java:126)
###@###.### 11/2/04 17:58 GMT
This bug is submitted with a view to re-examining the use of the ByteArrayOutputStream - it might be better to use a temporary file as the size of the target VM's heap isn't known in advance and could be very large.
> Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
> at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:70)
> at java.io.DataOutputStream.writeInt(DataOutputStream.java:182)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeObjectID(HeapHprofBinWriter.java:661)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeInternalReferenceField(HeapHprofBinWriter.java:464)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter$2.doOop(AbstractHeapGraphWriter.java:155)
> at sun.jvm.hotspot.oops.ObjArray.iterateFields(ObjArray.java:55)
> at sun.jvm.hotspot.oops.Oop.iterate(Oop.java:112)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter.writeObjectFields(AbstractHeapGraphWriter.java:146)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeObjectArray(HeapHprofBinWriter.java:459)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter$1.doObj(AbstractHeapGraphWriter.java:53)
> at sun.jvm.hotspot.oops.ObjectHeap.iterateLiveRegions(ObjectHeap.java:415)
> at sun.jvm.hotspot.oops.ObjectHeap.iterate(ObjectHeap.java:231)
> at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter.write(AbstractHeapGraphWriter.java:34)
> at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:349)
> at sun.jvm.hotspot.tools.JMap.writeHeapHprofBin(JMap.java:134)
> at sun.jvm.hotspot.tools.JMap.run(JMap.java:71)
> at sun.jvm.hotspot.tools.Tool.start(Tool.java:204)
> at sun.jvm.hotspot.tools.JMap.main(JMap.java:126)
###@###.### 11/2/04 17:58 GMT