Skip to main content
Article thumbnail
Location of Repository

GCspy: An Adaptable Heap Visualisation Framework

By Tony Printezis and Richard E. Jones


GCspy is an architectural framework for the collection, transmission, storage and replay of memory management behaviour. It makes new contributions to the understanding of the dynamic memory behaviour of programming languages (and especially object-oriented languages that make heavy demands on the performance of memory managers). GCspy's architecture allows easy incorporation into any memory management system: it is not limited to garbage-collected languages. It requires only small changes to the system in which it is incorporated but provides a simple to use yet powerful data-gathering API. GCspy scales to allow very large heaps to be visualised effectively and efficiently. It allows already-running, local or remote, systems to be visualised and those systems to run at full speed outside the points at which data is gathered. GCspy's visualisation tool presents this information in a number of novel ways. Deep understanding of program behaviour is essential to the design of the next generation of garbage collectors and explicit allocators. Until now no satisfactory tools have been available to assist the implementer in gaining an understanding of heap behaviour. GCspy has been demonstrated to be a practical solution to this dilemma. It has been used to analyse production Java virtual machines running applications of realistic size. Its use has revealed important insights into the interaction between application program and JVM and has led to the development of better garbage collectors

Topics: QA76
Publisher: Computing Laboratory, UKC
Year: 2002
OAI identifier:

Suggested articles


  1. (1992). A Comparative Performance Evaluation of Write Barrier Implementations.
  2. (2000). A Generational Mostly-Concurrent Garbage Collector. In
  3. (2000). A memory allocator. The DLmalloc homepage
  4. (1996). An Orthogonally Persistent Java.
  5. (2002). Beltway: Getting around garbage collection gridlock.
  6. (1999). Compiling Lazy Functional Programs for the Java Virtual Machine.
  7. (2000). Debugging by Remote Reflection.
  8. (2000). Designing a Trace Format for Heap Allocation Events. In
  9. (2001). Drive-by Analysis of Running Programs.
  10. (2000). Dynamic adaptive pre-tenuring.
  11. (1995). Dynamic Storage Allocation: a Survey and Critical Review.
  12. (1997). ECLiPSe: A platform for constraint logic programming.
  13. (1988). Garbage Collection in an Uncooperative Environment.
  14. (1996). Garbage Collection: Algorithms for Automatic Dynamic Memory Management.
  15. (1984). Generation Scavenging: a Non-Disruptive High Performance Storage Reclamation Algorithm.
  16. (1993). Heap profiling of lazy functional programs.
  17. (1999). Implementing Jalapen˜o in Java.
  18. (2001). Inc. Java™ Heap Analysis Tool (HAT).
  19. (2001). Inc. The Java HotSpot™ Virtual Machine,
  20. (1992). Incremental Garbage Collection of Mature Objects.
  21. (1995). Incremental Mature Garbage Collection using the Train Algorithm.
  22. (1997). Main-Memory Management to support Orthogonal Persistence for Java.
  23. (2000). Management of Long-Running High-Performance Persistent Object Stores.
  24. (1997). OCB: An Object/Class Browser for Java.
  25. (1999). Performance Evaluation Corporation. SPECjvm98 Documentation, release 1.03 edition,
  26. (1999). Refactoring: Improving the Design of Existing Code.
  27. (1994). Self-describing files + smart modules = parallel program visualisation.
  28. (1988). Simple Generational Garbage Collection and Stack Allocation.
  29. (2000). Software engineering tools and environments: A roadmap.
  30. (1992). Tail recursion without space leaks.
  31. (1988). Tenuring Policies for Generation-Based Storage Reclamation.
  32. (1997). The Design of a new Persistent Object Store for PJama.
  33. (1996). The Dylan Reference Manual.
  34. (1999). The GC Interface in the EVM.
  35. (1993). The Glasgow Haskell compiler: a technical overview.
  36. (1993). The GNU C++ library. The C++ Report,
  37. (2001). The HotSpot™ Serviceability Agent: An Out-of-Process High-Level Debugger for a Java™ Virtual Machine.
  38. (2000). The Jalapen˜o Virtual Machine.
  39. (2001). The Jinsight project. //
  40. (2001). The JProbe Suite. Homepage
  41. (1998). The Memory Fragmentation Problem: Solved?
  42. (2001). The OptimizeIt tool. Homepage
  43. (1987). The Power Of Simplicity.
  44. The Tracing JVM.
  45. (1999). Using a Tracing Java™ Virtual Machine to Gather Data on the Behaviour if Java Programs,
  46. (1998). Using generational garbage collection to implement cache-conscious data placement.
  47. (2002). Visualising the Train Garbage Collector. In
  48. (2000). Visualizing Reference Patterns for Solving Memory Leaks in Java.

To submit an update or takedown request for this paper, please submit an Update/Correction/Removal Request.