Learn about object overhead in JVM

2019-02-22 03:27发布

问题:

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?

回答1:

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:

  • In Java, what is the best way to determine the size of an object?
  • Memory usage of Java objects: general guide


回答2:

I found this article rather informative, although I had some doubts by some of the values mentioned in the tables