Object combining: A new aggressive optimization for object intensive programs

  • Authors:
  • Ronald Veldema;J. H. Ceriel;F. H. Rutger;E. Henri

  • Affiliations:
  • Vrije Universiteit, Amsterdam, The Netherlands;Vrije Universiteit, Amsterdam, The Netherlands;Vrije Universiteit, Amsterdam, The Netherlands;Vrije Universiteit, Amsterdam, The Netherlands

  • Venue:
  • JGI '02 Proceedings of the 2002 joint ACM-ISCOPE conference on Java Grande
  • Year:
  • 2002

Quantified Score

Hi-index 0.00

Visualization

Abstract

Object combining tries to put objects together that have roughly the same life times in order to reduce strain on the memory manager and to reduce the number of pointer indirections during a program's execution. Object combining works by appending the fields of one object to another, allowing allocation and freeing of multiple objects with a single heap (de)allocation. Unlike object inlining, which will only optimize objects where one has a (unique) pointer to another, our optimization also works if there is no such relation. Object inlining also directly replaces the pointer by the inlined object's fields. Object combining leaves the pointer in place to allow more combining. Elimination of the pointer accesses is implemented in a separate compiler optimization pass.Unlike previous object inlining systems, reference field overwrites are allowed and handled, resulting in much more aggressive optimization. Our object combining heuristics also allow unrelated objects to be combined, for example those allocated inside a loop; recursive data structures (linked lists, trees) can be allocated several at a time and objects that are always used together can be combined.The main focus of object combining in this paper is on reducing object (de)allocation overhead, by reducing both garbage collection work and the number of object allocations. Reduction of memory management overhead causes execution time to be reduced by up to 35%. Indirection removal further reduces execution time by up to 6%.