Object-oriented languages such as Java and Smalltalk provide a uniform
object reference model, allowing objects to be conveniently shared. I
f implemented directly, these uniform reference models can suffer in e
fficiency due to additional memory dereferences and memory management
operations. Automatic inline allocation of child objects within parent
objects can reduce overheads of heap-allocated pointer-referenced obj
ects. We present three compiler analyses to identify inlinable fields
by tracking accesses to heap objects. These analyses span a range from
local data flow to adaptive whole-program, flow-sensitive inter-proce
dural analysis. We measure their cost and effectiveness on a suite of
moderate-sized C++ programs (up to 30,000 lines including libraries).
We show that aggressive interprocedural analysis is required to enable
object inlining, and our adaptive inter-procedural analysis [23] comp
utes precise information efficiently. Object inlining eliminates typic
ally 40% of object accesses and allocations (improving performance up
to 50%). Furthermore,.