What is the storage cost for a boxed primitive in Java?

前端 未结 4 1849
醉酒成梦
醉酒成梦 2020-12-15 21:04

How large, in bytes, is a boxed primitive like java.lang.Integer or java.lang.Character in Java?

An int is 4 bytes, a typical

4条回答
  •  长情又很酷
    2020-12-15 21:47

    This is implementation defined, so there's no specific answer. But I should be able to answer it for Hotspot.

    What you need to know is: Hotspot always aligns objects on 8byte boundaries. Furthermore there are 2 words overhead for each and every object. [1]

    If we put this together we get:

    32bit VM: 4byte integer + 2 words object header = 12bytes. That's no multiple of 8 so as a result the cost for 1 integer is the next multiple of 8: 16byte.

    64bit VM: 4byte integer + 2 words = 20bytes. Rounding up again: 24byte size.

    The size of a reference obviously does not play into the size of an object itself, except if it has references to other objects which isn't the case for a simple int wrapper. If it would, we'd have 4byte per reference for 32bit and 4byte for heaps <= 32gb with CompressedOops on modern JVMs (otherwise 8byte) for 64bit JVMs.

    [1] Interested people can look at the code in share/vm/oops/oop.hpp

提交回复
热议问题