Class HeapDump.Builder

java.lang.Object
org.graalvm.tools.insight.heap.HeapDump.Builder
All Implemented Interfaces:
Closeable, AutoCloseable
Enclosing class:
HeapDump

public final class HeapDump.Builder extends Object implements Closeable
Builder to construct content of the heap dump file.

Builder builder = HeapDump.newHeapBuilder(new FileOutputStream(hprof));
builder.dumpHeap((heap) -> {
    final ClassInstance classActor = heap.newClass("cartoons.Actor").
        field("name", String.class).
        field("friend", Object.class).
        field("age", int.class).
        dumpClass();
    final ObjectInstance jerry = heap.newInstance(classActor).
        put("name", heap.dumpString("Jerry")).
        putInt("age", 47).
        // field 'friend' remains null
        dumpInstance();
    final ObjectInstance tom = heap.newInstance(classActor).
        put("name", heap.dumpString("Tom")).
        put("friend", jerry).
        putInt("age", 32).
        dumpInstance();
    final ClassInstance classMain = heap.newClass("cartoons.Main").
        field("tom", classActor).
        field("jerry", classActor).
        field("thread", java.lang.Thread.class).
        dumpClass();

    HeapDump.InstanceBuilder mainBuilder = heap.newInstance(classMain);
    final ObjectInstance main = mainBuilder.id();
    mainBuilder.put("tom", tom).put("jerry", jerry);

    ObjectInstance cathingThread = heap.newThread("Catching Jerry").
        addStackFrame(classActor, "tom", "Actor.java", -1, jerry, tom, main).
        addStackFrame(classMain, "main", "Main.java", -1, main).
        dumpThread();

    mainBuilder.put("thread", cathingThread).dumpInstance();
});
Since:
21.1
  • Method Details

    • dumpHeap

      public void dumpHeap(Consumer<HeapDump> generator) throws IOException
      Generates heap dump.

      Builder builder = HeapDump.newHeapBuilder(new FileOutputStream(hprof));
      builder.dumpHeap((heap) -> {
          final ClassInstance classActor = heap.newClass("cartoons.Actor").
              field("name", String.class).
              field("friend", Object.class).
              field("age", int.class).
              dumpClass();
          final ObjectInstance jerry = heap.newInstance(classActor).
              put("name", heap.dumpString("Jerry")).
              putInt("age", 47).
              // field 'friend' remains null
              dumpInstance();
          final ObjectInstance tom = heap.newInstance(classActor).
              put("name", heap.dumpString("Tom")).
              put("friend", jerry).
              putInt("age", 32).
              dumpInstance();
          final ClassInstance classMain = heap.newClass("cartoons.Main").
              field("tom", classActor).
              field("jerry", classActor).
              field("thread", java.lang.Thread.class).
              dumpClass();
      
          HeapDump.InstanceBuilder mainBuilder = heap.newInstance(classMain);
          final ObjectInstance main = mainBuilder.id();
          mainBuilder.put("tom", tom).put("jerry", jerry);
      
          ObjectInstance cathingThread = heap.newThread("Catching Jerry").
              addStackFrame(classActor, "tom", "Actor.java", -1, jerry, tom, main).
              addStackFrame(classMain, "main", "Main.java", -1, main).
              dumpThread();
      
          mainBuilder.put("thread", cathingThread).dumpInstance();
      });
      
      Parameters:
      generator - callback that performs the heap generating operations
      Throws:
      IOException - when an I/O error occurs
      Since:
      21.1
      See Also:
    • dumpHeap

      public void dumpHeap(long timeStamp, Consumer<HeapDump> generator) throws IOException
      Generates heap dump with an explicitly specified time stamp. Should there be multiple dumps in a single file, it is expected the subsequent values of timeStamp are not going to be decreasing.

      Builder builder = HeapDump.newHeapBuilder(new FileOutputStream(hprof));
      builder.dumpHeap((heap) -> {
          final ClassInstance classActor = heap.newClass("cartoons.Actor").
              field("name", String.class).
              field("friend", Object.class).
              field("age", int.class).
              dumpClass();
          final ObjectInstance jerry = heap.newInstance(classActor).
              put("name", heap.dumpString("Jerry")).
              putInt("age", 47).
              // field 'friend' remains null
              dumpInstance();
          final ObjectInstance tom = heap.newInstance(classActor).
              put("name", heap.dumpString("Tom")).
              put("friend", jerry).
              putInt("age", 32).
              dumpInstance();
          final ClassInstance classMain = heap.newClass("cartoons.Main").
              field("tom", classActor).
              field("jerry", classActor).
              field("thread", java.lang.Thread.class).
              dumpClass();
      
          HeapDump.InstanceBuilder mainBuilder = heap.newInstance(classMain);
          final ObjectInstance main = mainBuilder.id();
          mainBuilder.put("tom", tom).put("jerry", jerry);
      
          ObjectInstance cathingThread = heap.newThread("Catching Jerry").
              addStackFrame(classActor, "tom", "Actor.java", -1, jerry, tom, main).
              addStackFrame(classMain, "main", "Main.java", -1, main).
              dumpThread();
      
          mainBuilder.put("thread", cathingThread).dumpInstance();
      });
      
      Parameters:
      timeStamp - time when the heap dump is supposed to be taken in milliseconds
      generator - callback that performs the heap generating operations
      Throws:
      IOException - when an I/O error occurs
      Since:
      21.1
      See Also:
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException