JVM上类的所有示例的大小

qlfbtfca  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(98)

我们如何在JVM中找到类的所有示例的大小?对一个通用的编程解决方案感兴趣,该解决方案可以用作库,并且不使用jstat或需要修改原始源代码的引用计数。

List<ReferenceType> classes = vm.classesByName(klass.getName());
        List<ObjectReference> objectReferences = classes.get(0).instances(Long.MAX_VALUE);

使用上面的代码可以获得所有ObjectReference(s)到特定类的对象。理想情况下,我们应该能够从对象引用中获取对象,并使用JOL调用VM.current().sizeOf(Object obj)https://github.com/openjdk/jol).一旦我遍历了所有的对象引用,我将得到类的对象所占用的总大小。我没有找到从ObjectReference获取Object的文档。
看起来Eclipse(https://help.eclipse.org/2022-12/index.jsp)和IntelliJ IDEA(https://www.jetbrains.com/help/idea/analyze-objects-in-the-jvm-heap.html)都可以获取对象并计算任何类的“保留大小”。

kqlmhetl

kqlmhetl1#

在Java中,对象通常被分配到堆上。因此,无需修改应用程序,您就可以获取堆转储并分析它。在SO中有一些问题和答案,例如

但是,与其从头开始在应用程序内部创建解决方案,您可能需要研究Application Performance Monitoring工具,这些工具可以轻松地附加到任何应用程序,因此是可重用的,以下是此类工具的不完整列表。

相关问题