[英]Size of all instances of a class on JVM
我們如何找到 JVM 中 class 的所有實例的大小? 對可以用作庫而不使用需要修改原始源代碼的jstat
或引用計數的通用編程解決方案感興趣。
List<ReferenceType> classes = vm.classesByName(klass.getName());
List<ObjectReference> objectReferences = classes.get(0).instances(Long.MAX_VALUE);
使用上面的代碼獲取特定 class 對象的所有ObjectReference
。理想情況下,我們應該能夠從對象引用中獲取 object 並使用 JOL 調用VM.current().sizeOf(Object obj)
( https://github.com/openjdk/jol )。 遍歷所有 object 引用后,我將獲得 class 的對象占用的總大小。但是,我沒有找到從其ObjectReference
獲取Object
的文檔。
似乎 Eclipse( https://help.eclipse.org/2022-12/index.jsp )和 IntelliJ IDEA( https://www.jetbrains.com/help/idea/analyze-objectjsv-in -heap.html ) 可以獲取對象並計算任何類的“保留大小”。 我沒能發現這些 IDE 是如何實現這個功能的。
Java中對象一般分配在堆上。 因此,無需修改應用程序,您就可以獲取堆轉儲並對其進行分析。 SO上有問題有答案,比如
但是,與其從頭開始並在您的應用程序內部創建解決方案,您可能希望研究可以輕松附加到任何應用程序並因此可重用的應用程序性能監控工具。 以下是此類工具的不完整列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.