Java中的盒装原始文件的存储成本是多少?

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中的代码

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...