Location of Repository

A Study of Java Demographics

By Richard E. Jones and Chris Ryder


Researchers have long strived to exploit program behaviour in order to improve garbage collection efficiency. For example, by using a simple heuristic, generational GC manages short-lived objects well, although longer-lived objects will still be promoted to an older generation and may be processed repeatedly thereafter. In this paper, we provide a detailed study of Java object lifetimes which reveals a richer landscape than the generational view offers. Allocation site has been claimed to be a good predictor for object lifetime, but we show that object lifetime can be categorised more precisely than 'short-lived/long-lived/immortal'. We show that (i) sites allocate objects with lifetimes in only a small number of narrow ranges, and (ii) sites cluster strongly with respect to the lifetime distributions of the objects they allocate. Furthermore, (iii) these clusterings are robust against the size of the input given to the program and (iv) are likely to allocate objects that are live only in particular phases of the program's execution. Finally, we show that, in contrast to previous studies, (v) allocation site alone is not always sufficient as a predictor of object lifetime distribution but one further level of stack context suffices

Topics: QA76
Publisher: ACM Press
Year: 2008
OAI identifier: oai:kar.kent.ac.uk:23979

Suggested articles



  1. (1983). A real-time garbage collector based on the lifetimes of objects. doi
  2. (1998). A study of the allocation behaviour of the SPECjvm98 Java benchmarks. doi
  3. (2007). a. Comparing clusterings — an information based distance. doi
  4. Age-based garbage collection. doi
  5. (1992). An adaptive tenuring policy for generation scavengers. doi
  6. (2002). An experimental study of renewalolder-first garbage collection. doi
  7. (2002). Beltway: Getting around garbage collection gridlock. doi
  8. (1983). C.E.Hewitt. A real-time garbage collector based on the lifetimes of objects. doi
  9. (1992). Combining copying and compacting garbage collection. doi
  10. (1989). Comparative Performance Evaluation of Garbage Collection Algorithms.
  11. (2007). Comparing clusterings — an information based distance. doi
  12. (1985). Comparing clusterings. doi
  13. (1999). Data clustering: A review. doi
  14. Decrypting the Java gene pool: Predicting objects’ lifetimes with micro-patterns. doi
  15. Dynamic adaptive pre-tenuring. doi
  16. (2004). Dynamic selection of applicationspecific garbage collectors. doi
  17. (1995). Dynamic storage allocation: A survey and critical review. doi
  18. (2002). Estimating the impact of liveness information on space consumption in Java. doi
  19. (1995). Garbage collection in shared-environment closure reducers: Space-efficient depth first copying using a tailored approach. doi
  20. (2006). Garbage collection should be lifetime aware.
  21. (1993). Garbage collection using a dynamic threatening boundary. doi
  22. (1996). Garbage Collection: Algorithms for Automatic Dynamic Memory Management. doi
  23. (2002). GCspy: An adaptable heap visualisation framework. doi
  24. (1984). Generation scavenging: A non-disruptive high performance storage reclamation algorithm. doi
  25. (1993). Generational garbage collection for Haskell. doi
  26. (1998). Generational stack collection and profile-driven pretenuring. doi
  27. (1967). Handbook of Methods of Applied Statistics, volume I. doi
  28. (2001). Hot-Swapping between a Mark&Sweep and a Mark&Compact Garbage Collector in a Generational Environment.
  29. I.Watson. Intelligent selection ofapplicationspecific garbage collectors. doi
  30. Implementing Jalape˜ no in Java. doi
  31. Intelligent selection of applicationspecific garbage collectors. doi
  32. (1985). Kyoto Common Lisp report.
  33. (1994). Memory allocation costs in large C and C++ programs. doi
  34. (2005). Micro patterns in Java code. doi
  35. (2004). Myths and reality: The performance impact of garbage collection. doi
  36. (1997). Non-Compacting Memory Allocation and RealTime Garbage Collection.
  37. (1971). Objective criteria for the evaluation of clustering methods. doi
  38. (2004). Oil and water? high performance garbage collection in Java with MMTk. doi
  39. (1991). Outwitting GC devils: A hybrid incremental garbage collector.
  40. (1999). Performance Evaluation Corporation. SPECjvm98 Documentation, release 1.03 edition,
  41. (2001). Pretenuring for Java. doi
  42. (2007). Probabilistic calling context. doi
  43. (2007). Profile-based pretenuring. doi
  44. (1999). Properties of Age-Based Automatic Memory Reclamation Algorithms.
  45. (1998). Segregating heap objects by reference behavior and lifetime. doi
  46. (1989). Simple generational garbage collection and fast allocation. doi
  47. The case for profile-directed selection of garbage collectors. doi
  48. (2006). The DaCapo benchmarks: Java benchmarking development and analysis. doi
  49. (1998). The GC interface in the EVM.
  50. (1997). The Java Language Specification.
  51. (1991). Using key object opportunism to collect old objects. doi
  52. (1993). Using lifetime predictors to improve memory allocation performance. doi

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