Aprof is a Java memory allocation profiler with very low performance impact on the profiled application.

It acts as an agent which transforms class bytecode by inserting counter increments wherever memory allocation is done.

Origin and Goal

Java VM has an option -Xaprof printing how many instances of classes were allocated during lifetime of the application and how much memory they occupied in total and per instance. The option has no performance impact due to the fact that counting takes place during garbage collection. The only drawbacks are occasional overflows of counters and the absence of any information on locations where the object allocations take place.

Aprof aims to overcome drawbacks of Java VM option -Xaprof by:

When to use Aprof

Aprof should be used when the application spends a lot of time in garbage collection. Due to the specifics of Java VM, objects are allocated so fast that CPU profilers are unable to pinpoint the allocation hotspot. The only way is to use memory allocation profilers.

There are many good memory allocation profilers. Unfortunately, in order to find locations where object allocations take place, they do the following:

As a result, memory allocation profilers leave us with both inaccurate profiling results and an impact on the profiled application.

Aprof gets accurate profiling results and finds locations of object allocations at the same time being garbage-free and having very low performance impact. Learn how it is done.

 

 
Navigate space