|
Spec-Zone .ru
спецификации, руководства, описания, API
|
An "oop", or ordinary object pointer in Java Hotspot parlance, is a managed pointer to an object. An oop is normally the same size as a native machine pointer, which means 64 bits on an LP64 system. On an ILP32 system, maximum heap size is somewhat less than 4 gigabytes, which is insufficient for many applications. On an LP64 system, though, the heap for any given run might have to be around 1.5 times as large as for the corresponding ILP32 system (assuming the run fits both modes). This requirement is due to the expanded size of managed pointers. Memory is inexpensive, but these days bandwidth and cache are in short supply, so significantly increasing the size of the heap and only getting just over the 4 gigabyte limit is undesirable.
Compressed oops represent managed pointers (in many but not all places in the JVM) as 32-bit values that must be scaled by a factor of 8 and added to a 64-bit base address to find the object they refer to. This manipulation enables applications to address up to four billion objects (not bytes), or a heap size of up to about 32 gigabytes. At the same time, data structure compactness is competitive with ILP32 mode.
The term decode is used to express the operation by which a 32-bit compressed oop is converted into a 64-bit native address into the managed heap. The inverse operation is referred to as encoding.
The Compressed Oops functionality is introduced in JDK7. For more information, see the weblog.