Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JProfiler-”的英文缩写;运行GC";按钮与堆快照';s";在堆快照中执行完全GC“;选项_Java_Garbage Collection_Classloader_Jprofiler - Fatal编程技术网

Java JProfiler-”的英文缩写;运行GC";按钮与堆快照';s";在堆快照中执行完全GC“;选项

Java JProfiler-”的英文缩写;运行GC";按钮与堆快照';s";在堆快照中执行完全GC“;选项,java,garbage-collection,classloader,jprofiler,Java,Garbage Collection,Classloader,Jprofiler,我有一个创建类加载器实例(URLClassLoader)并使用它动态加载Jar文件的应用程序。接下来,使用反射创建Jar类的实例。最后,所有引用都以垃圾收集类装入器及其相关对象和类的方式为空 在JProfiler 10.1.5中进行评测期间,我单击“运行GC”工具栏按钮,然后拍摄堆快照(无论是否选择了“在堆快照中执行完整GC”选项)。正如我所料,堆上没有类装入器实例,没有相关的对象和类,它们是垃圾收集的 另一方面,当我不使用“运行GC”按钮,而是使用“在堆快照中执行完整GC”选项选择时(使用“仅

我有一个创建类加载器实例(URLClassLoader)并使用它动态加载Jar文件的应用程序。接下来,使用反射创建Jar类的实例。最后,所有引用都以垃圾收集类装入器及其相关对象和类的方式为空

在JProfiler 10.1.5中进行评测期间,我单击“运行GC”工具栏按钮,然后拍摄堆快照(无论是否选择了“在堆快照中执行完整GC”选项)。正如我所料,堆上没有类装入器实例,没有相关的对象和类,它们是垃圾收集的


另一方面,当我不使用“运行GC”按钮,而是使用“在堆快照中执行完整GC”选项选择时(使用“仅保留强引用持有的对象””子选项),我总是在快照上看到我的类加载器实例,以及相关的对象和类。他们没有被垃圾收集!为什么?

类加载器被JProfiler视为GC根,堆遍历器不会尝试收集类加载器。

好,但为什么?如果没有其他东西引用类加载器及其类和对象,则类加载器有资格被垃圾收集器删除。我认为Heap Walker应该给用户提供收集类装入器的可能性,或者至少应该有关于Heap Walker这种行为的清晰可见的信息。我花了很多时间搜索问题所在,结果证明我的代码是正确的,但Heap Walker提供了误导性的信息。当然,Heap Walker不会尝试收集类装入器,因为它不会收集任何内容。您的答案是将堆转储分析工具与JVM的实际垃圾收集器混淆。@Holger应该在引号中加上“collect”,但过程类似使用
java.lang.ref
API并单击“Run GC”的终结器或清理器可能会导致延迟,启动堆转储之后,速度足够慢,可以完成此处理。