Child pages
  • About Aprof

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Aprof is a Java memory allocation profiler with very low performance impact on the profiled application that can be used (and is used) on highly-loaded server-side applications in production environment. It acts as an agent which transforms class bytecode by inserting counter increments wherever memory allocation is done and tracks a precise size of allocated objects in bytes. It also keeps limited information about allocation context to aid to finding the memory allocation bottlenecks. See short Tutorial for basic usage and examples.

Features overview

  • Fast (can be used and is designed to be used in production) 
  • Provides detailed information (can be used to identify problematic pieces of code)
  • Configurable level of detail (as a compromise between speed and detailness)
  • Open Source (help us improve it!)

...

In current version (build 2627):

  • Does not take into account the fact, that some memory allocation are removed by JIT after escape analysis and actually prevents JIT modern HotSpot VM, however it does not prevents HotSpot from allocating objects on stack.
  • Does not work on some old releases of 1.6 and (1.6.0_21 crashes with FATAL ERROR), but otherwise works in Java 1.5 JVMsto Java 1.7.

Origin and Goals

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.

...

  • collecting information on locations where the object allocations take place. 
  • providing an accurate profiling results.
  • having very low performance impact (to be safely used in production environments).

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.

...