JProfiler - "Run GC" 按钮与堆快照的 "Perform full GC in heap snapshot" 选项
JProfiler - "Run GC" button vs Heap Snapshot's "Perform full GC in heap snapshot" option
我有创建 Class Loader 实例 (URLClassLoader) 并使用它动态加载 Jar 文件的应用程序。接下来,使用反射创建来自 Jar 的 class 实例。最后,所有引用都以 Class Loader 及其相关对象和 classes 应该被垃圾收集的方式无效。
在 JProfiler 10.1.5 中进行分析时,我单击“运行 GC”工具栏按钮,然后我使用堆快照(与是否选择 "Perform full GC in heap snapshot" 选项无关)。如我所料,堆上没有 Class Loader 实例,没有相关对象和 classes,它们被垃圾收集。
另一方面,当我不使用"Run GC"按钮,而是使用[=拍摄许多堆快照时32=] 选项 selected(带有“只保留强引用持有的对象”子选项),我总是看到我的Class 快照上的加载程序实例,以及相关对象和 classes。他们不是垃圾收集!为什么?
一个 class 加载器被 JProfiler 认为是 GC 根,堆遍历器将不会尝试收集 class 个加载器。
我有创建 Class Loader 实例 (URLClassLoader) 并使用它动态加载 Jar 文件的应用程序。接下来,使用反射创建来自 Jar 的 class 实例。最后,所有引用都以 Class Loader 及其相关对象和 classes 应该被垃圾收集的方式无效。
在 JProfiler 10.1.5 中进行分析时,我单击“运行 GC”工具栏按钮,然后我使用堆快照(与是否选择 "Perform full GC in heap snapshot" 选项无关)。如我所料,堆上没有 Class Loader 实例,没有相关对象和 classes,它们被垃圾收集。
另一方面,当我不使用"Run GC"按钮,而是使用[=拍摄许多堆快照时32=] 选项 selected(带有“只保留强引用持有的对象”子选项),我总是看到我的Class 快照上的加载程序实例,以及相关对象和 classes。他们不是垃圾收集!为什么?
一个 class 加载器被 JProfiler 认为是 GC 根,堆遍历器将不会尝试收集 class 个加载器。