有没有办法在Java中确定一个对象的大小?
有没有办法在Java中确定一个对象的大小?
可能的重复问题:\n- [sizeof java object](https://stackoverflow.com/questions/4115239/sizeof-java-object)\n- [In Java, what is the best way to determine the size of an object?](https://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object)\n你好,\n为什么Java中没有sizeof?如何知道一个对象的大小?\n谢谢。
这是一个复杂的讨论,因为“大小”指的是什么?你是指Java用多少字节来表示一个int或char等等?还是指它用多少字节来存储对象的引用?或者是指JVM使用多少字节来创建和存储对象中的所有数据的内部结构?我敢猜测,对于最后两个问题的答案是依赖于操作系统的,而且我认为你不能进行标准化。(例如,在64位的机器上,操作系统一次处理64位整数比32位更容易 - 所以很可能在内部,Java的int将用8个字节表示,即使java int只存储32位的值。)
有一些方法可以找出其中一些 - 例如查看这个链接:http://devblog.streamy.com/2009/07/24/determine-size-of-java-object-class/,但它们在不同的操作系统上并不一致。
在Java中确定一个对象的大小,是一个复杂的讨论。这是因为"大小"的定义可以有多种解释。它可以指一个int或char等数据类型在Java中占用多少字节。它也可以指对象引用在内存中占用多少字节。又或者它可以指JVM在创建和存储对象时使用的内部结构占用多少字节。然而,这些问题的答案往往依赖于操作系统,并且无法进行标准化。
尽管如此,有一些方法可以在某些情况下找出对象的大小。例如,可以参考这个链接:http://devblog.streamy.com/2009/07/24/determine-size-of-java-object-class/。然而,这些方法在不同的操作系统上可能会有不一致的结果。因此,在确定Java对象的大小时需要谨慎。
有没有办法在Java中确定一个对象的大小?是有的。这是一个示例:这里是一个示例。另一种方法是声明一个对象并在实例化之前和之后使用Runtime.freeMemory(),然后查看差异。
但这不一定正确,因为如果JVM决定调整(扩大)堆空间,你会发现在分配之后比之前有更多的可用空间!
如果你对许多对象重复执行这个操作,大部分时间你可以得到正确的大小。:)
重要的是要重复进行测试。如果你创建太多对象,可能会出现垃圾回收(GC),这将导致奇怪的结果,甚至是负结果。