我发现了大量关于“保留大小”的问题,接受的答案似乎是:
对象的保留大小是该对象从垃圾收集中保留的内存量。
现在,我一直在使用 Netbeans 分析器库(在 中完成保留大小计算)对文件中的保留大小(如此处定义)进行编程hprof
计算。工作得很好(抱歉,为简洁起见,使用了 kotlin):HprofHeap.java
val heap: Heap = HeapFactory.createHeap(myHeap.toFile())
val threadClass: JavaClass = heap.getJavaClassByName("java.lang.Thread")
val instanceFilter = { it: Instance -> threadClass == it.getJavaClass() }
val sizeMap = heap.allInstances
.filter { instanceFilter(it) }
.toMap({ findThreadName(it) /* not shown */ }, { it.retainedSize })
sizeMap
当保留大小只有边际数量时,我注意到的是 Netbeans 仅计算不在堆栈上的对象的保留大小。因此分配给 的局部变量(在堆栈上分配)Thread
不会包含在保留大小中。
我的问题是:有没有办法让 netbeans 库将堆栈元素视为依赖对象,例如 Yourkit Profiler 的计算方式?如果上一个问题的答案是“否”,我将如何添加这样的功能?