Compressed oops in the Hotspot JVM
What's an oop
An "oop", or "ordinary object pointer" in HotSpot parlance is a managed pointer to an object. It It is normally the same size as a native machine pointer, which means 64 bits on an LP64 system. On an ILP32 system, .
Why should they be compressed?
On an LP64 system, a machine word, and hence an oop, requires 64 bits, while on an ILP32 system, oops are only 32 bits. But on an ILP32 system there is a maximum heap size of somewhat less than 4Gb, which is not enough for many applications. On an LP64 system, though, the heap for any given run may have to be around 1.5 times as large as for the corresponding IPL32 ILP32 system (assuming the run fits both modes). This is due to the expanded size of managed pointers. Memory is pretty cheap, but these days bandwidth and cache is in short supply, so significantly increasing the size of the heap just to get over the 4Gb limit is painful.