AntTracks – Accurate and Efficient Object Tracing for Java Applications


Object allocations and garbage collection can have a considerable impact on the performance of Java applications.
Without monitoring tools, such performance problems are hard to track down, and if such tools are applied, they often cause a significant overhead and tend to distort the behavior of the monitored application.
In the paper Accurate and Efficient Object Tracing for Java Applications we proposed a novel light-weight memory monitoring approach in which we trace allocations, deallocations and movements of objects using VM-specific knowledge.
Our approach allows us to reconstruct the heap for any point in time and to do offine analyses on both the heap and on the trace. The average run-time overhead is 4.68%, which seems to be fast enough for keeping tracing switched on even in production mode.
This site provides downloads of our virtual machine and the analysis tool as well as tutorials on how to use both of them.


Using the AntTracks VM, you can execute and trace any Java application.
The VM will track every allocation, i.e., the allocation site (including the calling frames for frequent allocations), the allocated type, the allocating thread, the object size, as well as a number of other properties as well as object movements throughout the heap, and object deaths, i.e., when they are reclaimed by the garbage collector.
The analysis tool can then process the trace offline and visualize the change of specific metrics throughout the progress of the application (e.g., memory usage per space over time, GC pauses over time) as well as the heap at a specific point in time.


This project is a cooperation of the Institute for System Software, the Christian Doppler Laboratory for Monitoring and Evolution of Very-large-scale Software Systems and Dynatrace Austria.


Allocation Information
Information recorded for every object allocation.
Tool - Overview
Memory usage overview and detailed heap snapshot.
Tool - Allocation Sites
Memory usage overview and detailed heap snapshot.



  • Philipp Lengauer – Researcher
  • Verena Bitto – Researcher
  • Stefan Fitzek – Student Researcher
  • Markus Weninger – Student Researcher
  • Ongoing student contributions by Christina Rammerstorfer, Michael Obermüller, Michael Popovtschak, and Dominik Aumayr


Please cite as: Accurate and Efficient Object Tracing for Java Applications, in Proceedings of the 6th ACM/SPEC International Conference on Performance Engineering (ICPE’15), Austin, TX, USA, 2015
Download both the virtual machine (under the GPL Licence, Copyright dynatrace 2014, 2015) and the analysis tool here:

Operating System Virtual Machine Analysis Tool
Linux 64-bit Download (src) Download (src)
Mac OS 64-bit Download (src) (deprecated) Download (src)
Windows 64-bit Download (src) Download (src)

Please note that the analysis tool is a prototype and under development. For questions, bug reports, feature requests, contributions, and/or collaborations, please contact Philipp Lengauer or Verena Bitto.

Virtual Machine

The virtual machine can be installed and used just as any other Java virtual machine. Without any additional parameters, it also behaves exactly like the Oracle Hotspot VM. To enable object tracing, set the VM flag “TraceObjects” by adding “-XX:+TraceObjects” right after the java command. If you run an arbitrary Java application with this flag, two files, named “symbols” and “trace”, will be written containing the object trace.


The following table contains some flags that might of interest:

Flag Description Example
TraceObjects Enable tracing alltogether. The default is “-” (off). -XX:+TraceObjects
TraceObjectsMaxTraceSize Specify a maximum size (in bytes) the trace file is allowed to grow. If the trace file gets too big, the start will be overwritten. Thus, always the last time frame will be available. The default is “0”, meaning that the trace file may grow indefinitely. If this flag is set to some value other than zero, more than one trace file will be written, all of which will be necessary for offline analysis. -XX:TraceObjectsMaxTraceSize=32G
TraceObjectsTraceSizeMaxDeviation Specify a maximum deviation (in percent) the trace file may grow above the max trace size. The default is “0.1” (10%). -XX:TraceObjectsTraceSizeMaxDeviation=0.05
TraceObjectsSymbolsFile Specify a location and name for the symbols file. The default is “./symbols”. -XX:TraceObjectsSymbolsFile=”./tracing/my_symbols”
TraceObjectsTraceFile Specify a location and name for the trace file(s). The default is “./trace”. -XX:TraceObjectsTraceFile=”./tracing/my_trace”

Analysis Tool

under construction …