2011-04-21 91 views

回答

1

是的。 Here就是这样做的一个例子。另一种方法是在对象声明并在实例化对象之前和之后执行Runtime.freeMemory(),而不是查看差异。

+3

这不一定是正确的 - 因为例如,如果JVM决定调整堆大小(增大堆大小),则会发现分配后的空间比以前多! – Liv 2011-04-21 16:36:46

+0

如果您为多个对象重复执行此操作,则可以在大多数情况下获得合适的尺寸。 ;) – 2011-04-21 16:39:31

+0

是的,我知道这不是完美的,但有足够的对象实例应该给出一个相当合理的估计 – 2011-04-21 17:23:50

0

,如果你想你的程序是你使用多少内存知道使用分析器。

基本上,对象的大小是你不需要在Java中非常清楚的东西之一。使你不会为什么它在C/C++中如此重要。 ;)

较长的答案是,您可以使用Instrumentation.getSizeOf(Object),但它的使用并不简单。

0

这是一个复杂的讨论,因为“尺寸”是什么意思?例如,你的意思是说Java需要多少字节来表示一个int或char等字符?或者你的意思是它使用多少个字节来存储对象的引用?或者JVM使用的内部结构有多少个字节用于创建和存储该对象中的所有数据?我想冒险猜测最后2个问题的答案是依赖于操作系统的,我认为你不能将其标准化。 (例如,在64位机器上,操作系统一次处理64位整数比32更容易 - 因此内部很可能在8字节内部表示Java int,尽管只有java int的存储32位值)。

有办法找出其中的一些 - 例如看看这个:http://devblog.streamy.com/2009/07/24/determine-size-of-java-object-class/ - 但它们在操作系统中不一致。

相关问题