从字面上考虑这个问题,在大多数JVM上,在32位JVM上的所有引用都占用4个字节,一个64位JVM则占用8个字节,除非已使用-XX:+
UseCompressedOops,在这种情况下,它需要4个字节。
我假设您在问如何分辨一个对象占用了多少空间。您可以使用Instrumentation(这不是一件简单的事情),但这只会给您带来深度。Java倾向于将您分解为许多对象,而C
++可能只是一个单一的结构,因此它没有那么有用。
但是,如果您遇到内存问题,建议您使用内存分析器。这将为您提供浅层和深层空间物体的使用,并为您提供整个系统的图像。这通常会更有用,因为您可以从最大的使用者开始并进行优化,就算您已经开发Java十多年以上,除非您拥有硬数据,否则您只会猜测最佳的优化位置。
如果您不想使用事件探查器,则获取对象大小的另一种方法是分配一个大数组并查看消耗了多少内存。您必须多次执行此操作才能很好地了解平均大小。我会设置很高的年轻空间,以避免GC混淆您的结果,例如
-XX:NewSize=1g



