Java中有多少字节,如java.lang.Integer或java.lang.Character中的盒子原语?
int为4字节,典型的指针也是4字节(如果没有被JVM压缩).是一个整数的成本(没有缓存),因此4字节4字节= 8字节?在对象内部还有更多隐藏的字段或者对象产生的额外开销(对于我不知道的对象来说,是否有一般成本?).
我对缓存问题不感兴趣我知道在一定范围内的整数由JVM缓存.
人们可以重新表达这个问题:对于使用盒装值的内存量与原始值相比,乘积的最大因子是多少?
编辑:我明白,存在JVM的多个实现.典型的32位HotSpot实现中的典型成本是多少?
解决方法
这是定义的实现,所以没有具体的答案.但是我应该能够回答它的热点.
您需要知道的是:热点始终对齐8byte边界上的对象.此外,每个对象都有2个字的开销. [1]
如果我们把它放在一起我们得到:
32位虚拟机:4字节整数2个字对象标题= 12字节.这不是8的倍数,因此1个整数的成本是8:16byte的下一个倍数.
64位虚拟机:4字节整数2字= 20字节.四舍五入:24字节大小.
引用的大小显然不会影响对象本身的大小,除非它引用了其他对象,而不是简单的int包装器.如果是这样,对于64位JVM,现在的JVM(否则为8byte),对于32bit和4byte,每堆参考4byte,堆积为= 32gb.
[1]有兴趣的人可以查看share / vm / oops / oop.hpp中的代码