Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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
JProfiler中java.lang.ref.Reference$Lock上的线程被阻塞_Java_Multithreading_Garbage Collection_Jprofiler - Fatal编程技术网

JProfiler中java.lang.ref.Reference$Lock上的线程被阻塞

JProfiler中java.lang.ref.Reference$Lock上的线程被阻塞,java,multithreading,garbage-collection,jprofiler,Java,Multithreading,Garbage Collection,Jprofiler,我已经从JProfiler中转储,我在那里查看性能,并在测试运行期间发现阻塞的线程。看起来是这样的: 根据这里的问题,java.lang.ref.Reference$lock上的锁意味着对象在运行GC的终结器时被锁定。这个假设正确吗? 还有,为什么在第二行,它说,这个锁是由我自己的另一个线程拥有的呢?可能吗 你知道这里发生了什么吗?事实上,这个锁不应该被应用程序线程持有。或者,当垃圾收集在应用程序线程内同步执行时,它可能会持有。是的,这可能就像我们从客户端代码手动运行终结器一样,但我认为我们不

我已经从JProfiler中转储,我在那里查看性能,并在测试运行期间发现阻塞的线程。看起来是这样的:

根据这里的问题,java.lang.ref.Reference$lock上的锁意味着对象在运行GC的终结器时被锁定。这个假设正确吗? 还有,为什么在第二行,它说,这个锁是由我自己的另一个线程拥有的呢?可能吗


你知道这里发生了什么吗?

事实上,这个锁不应该被应用程序线程持有。或者,当垃圾收集在应用程序线程内同步执行时,它可能会持有。是的,这可能就像我们从客户端代码手动运行终结器一样,但我认为我们不会。此外,它可能是错误的Jprofiler部分。¯\_(ツ)_/''不运行终结器,而是在应用程序线程内执行的标记阶段。每当垃圾收集器遇到
引用
对象时,该对象不一定是可终结的对象,也可能是弱引用或软引用,它可能会将其交给引用处理程序线程,这意味着获取锁您可以在转储中看到,在很短的时间内。然后,引用处理程序线程将使发现的引用对象排队,然后其中一个专用终结器线程将使下一个终结器引用(如果有)出列,并执行finalize方法实际上,此锁不应由应用程序线程持有。或者,也许它可以,当垃圾收集在应用程序线程内同步执行时。是的,这可能类似于我们从客户端代码手动运行终结器,但我认为我们没有。此外,可能是Jprofiler部分出错。”\_(ツ)_/''不运行终结器,而是在应用程序线程内执行的标记阶段。每当垃圾收集器遇到
引用
对象时,该对象不一定是可终结的对象,也可能是弱引用或软引用,它可能会将其交给引用处理程序线程,这意味着获取锁您可以在转储中看到一段很短的时间。然后,引用处理程序线程将使发现的引用对象排队,然后其中一个专用终结器线程将使下一个终结器引用(如果有)退出队列,并执行finalize方法