Search code examples
javagarbage-collectionheap-memoryjmcjfr

Java Mission Control Heap Profile


I am playing with the new Java Mission Control Profiler that is coming with the Java 7u40 and I cannot make it to profile allocation and collect object statistics. No matter what I do, I cannot see any statistics in the Memory -> Object Statistics window.

The following command starts the collection:

jcmd <pid> JFR.start duration=60s settings=profile filename=alloc-prof.jfr

The Java Mission Control documentation does not mention any specific options to enable object profiling. I have tried to create my own profile and set :

  <flag name="heap-statistics-enabled" label="Heap Statistics">true</flag>
  <flag name="allocation-profiling-enabled" label="Allocation Profiling">true</flag>

But still no Object Statistics are collected.


Solution

  • Use the template manager that is available in Mission Control.

    Go to Windows -> Template Manager and import the template and check Heap Statistics and Allocation Profiling, export it. Done!

    If you want to edit the jfc-file manually, it can be good to know elements inside the control-element are not read by the JVM, i.e flag-element, They are used by JMC to modify the parameters outside the control element (the one with the control attribute)

    A manual edit requires that you modify these:

    set java/object_alloc_in_new_TLAB enabled to true

    set java/object_alloc_outside_TLAB enabled to true

    set vm/gc/detailed/object_count enabled to true

    Note, there are two object count events, with object_count_after_gc you will increase GC times. If you pick the one above instead, you will get one additional GC per recording chunk (which is usually sufficient)