gpt4 book ai didi

Java Instrumentation 查找对象大小

转载 作者:行者123 更新时间:2023-12-02 03:40:24 25 4
gpt4 key购买 nike

计算 Java 对象大小时

Class Test { 

private String name = null;

private List<String> myList = null;

}

如果列表中只有一项与列表中的数千项相比,Test 类对象的大小是否会有所不同?

最佳答案

嗯,这取决于你想如何计算。

Test实例本身不会更大,它只是引用 List实例(或 null ,但这也占用相同数量的空间),并且 List实例是它自己的对象,存储在堆的其他位置(Test 实例的外部)。

List实例的大小(取决于实现)也不会变化,但它将依次引用其他对象(列表条目、数组或其他事物)。

一般来说,Java 中的所有类实例都会占用固定的内存分配,该内存分配由类决定,并且不会因实例而异。唯一可以具有“动态”大小的是数组(但它并不是那么动态,因为它在数组创建时间上也是固定的,因此它可以根据实例的不同而变化,但对于给定的实例不会随着时间的推移而变化)

如果你想计算 Test 所需的所有内存的“对象图闭包”对象和所有依赖项/内容(例如,估计将其序列化到文件需要多少内存),那么是的,它会根据列表中的对象数量而增长。

另请注意 ArrayList["foo", "foo"]可能会消耗与 ["foo", "foo", "foo"] 相同的总空间量。 (因为同一个单字符串实例被重复使用三次,并且支持数组无论如何都有八个条目)。或者您可能有多个Test共享相同的实例 List 。所以这并不容易,取决于你想如何计算。

关于Java Instrumentation 查找对象大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com