如何测试对象引用在Java中使用的字节数?

Phi*_*hil 8 java memory byte reference object

我想测试一个对象引用在我正在使用的Java VM中使用的字节数.你们知道怎么测试吗?

谢谢!

Pet*_*rey 11

从字面上看,在大多数JVM上,32位JVM上的所有引用都需要4个字节,一个64位JVM,引用需要8个字节,除非使用-XX:+ UseCompressedOops,在这种情况下需要4个字节.

我假设你在问如何判断一个Object占用了多少空间.你可以使用Instrumentation(不是一件简单的事情),但这只会给你一个很浅的深度.Java倾向于闯入许多对象,而C++可能是单个结构,因此它没有那么有用.

但是,如果你有内存问题,我建议你一个内存分析器.这将为您提供浅层和深层空间对象的使用,并为您提供整个系统的图片.这通常更有用,因为你可以从最大的消费者开始并优化它们,即使你已经开发了十年的Java +你只会猜测哪里是优化的最佳位置,除非你有硬数据.

如果您不想使用分析器,获取对象大小的另一种方法是分配一个大型数组并查看消耗了多少内存,您必须多次这样做才能很好地了解平均大小.我会把年轻的空间设置得很高,以避免GCs混淆你的结果,例如-XX:NewSize=1g