I am studying java, and I remember reading somewhere that java objects, had some overhead inside the JVM, which was used for administration reasons by the virtual machine. So my question is, can someone tell me if and how I can get an object's total size in the HotSpot JVM, along with any overhead it may come with?
In computer science, overhead is any combination of excess or indirect computation time, memory, bandwidth, or other resources that are required to perform a specific task.
To store an object, JVM reserves enough space for its fields and service information. Service info includes reference to the class object and bits for synchronization. All accesses to objects, including class objects, is done via memory addresses. Hashcode and equals are not used by JVM during object lifecycle.
All objects in Java programs are created on heap memory.
The object header contains the following data in the order presented: Object ID (class ID) A 4-byte field containing a hexadecimal value known as the class ID of the object. The class ID stored in this field for a given object represents its most detailed classification.
You can't get the overhead directly. The amount of overhead is implementation dependent, and can vary based on a number of factors (e.g. the precise JVM version, and whether you are on a 32 or 64bit JVM).
However it is reasonably safe to assume that in typical modern JVM implementations like HotSpot, the overhead per object is between 8 and 16 bytes. Arrays typically have an overhead that is 4 bytes larger than other objects (to contain the integer array length).
See also:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With