在Java中为一个Integer对象分配了多少内存?如何找出任何自定义对象的这个值?

Rom*_*man 8 java memory performance jvm memory-management

测量堆中的内存应该用于创建某种类型的新对象的正确方法是什么(让我们谈谈Integers以保持简单)?

没有实验可以计算出这个值吗?那种情况下的规则是什么?这些规则是在某处严格规定的还是从jvm到jvm不等?

Thi*_*ilo 14

它可能因JVM而异.

您可能喜欢Oracle工程师发布的这篇博文:

对于32位热点JVM上的Java Integer,32位有效负载(Integer.value字段)附带96个附加位,一个标记,一个klass和一个对齐填充字,用于总共128位.此外,如果世界上有(例如)六个对此整数的引用(线程加堆),那些引用也占用192位,总共320位.在64位机器上,一切都是两倍大,至少目前是:对象中的256位(现在包括96位填充)和其他地方的384位.相比之下,未装箱的原始整数的六个副本占用192位