Hello
I'm working as a performance engineer for an editor, and JMC is a very valuable tool for us. A key feature we use a lot is allocation profiling since reducing the allocation rate has often a good impact on the overall application performance.
We are currently starting to use Java 9, so we need to use JMC 6 to run a JFR instead of JMC 5.5.
After struggling with the new interface, I succeed to use it to do nearly everything I used to do before. But unfortunately, the memory profiling in the new version seems VERY inaccurate and barely usable.
As far as I know, in the "Stack Trace" view, we can only use the "Count" attribute, which seems to be the number of stack traces captured at TLAB creation or when allocation outside TLAB.
Since the TLAB size is not constant, it is not at all a valuable information. I open an old flight recording made an a JVM 8 with both version of JFR.
In this recording, 1 class represents 55% of the total allocated bytes, and there are 2 allocation spots for this class :
- the first one in a thread pool which does few allocation
- the second one in another thread pool which is allocating a lot.
I assume that the JVM will allocate bigger TLABs for threads in the first pool
Indeed, according to JMC 5.5, less than 2% of the allocation pressure is located on the first spot (129GB vs 2.5GB)
However, in JMC6, only the "count" is available, and the first allocation spot count for 30% of the events (45K vs 105K)
Let's say that the first spot is easy to optimize whereas the second allocation spot is not.
=> Using JMC6, we might think that optimizing the first spot is a valuable thing , but in reality it will be nearly insignificant
Is there any setting I didn't see that allow JMC 6 to display size-based memory profiling ?
Best Regards,
Anthony