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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…