如何检查仍在使用哪个线程或对象?

时间:2019-03-20 09:52:19

标签: java garbage-collection jvm

谁能告诉我如何查看哪些活动/线程保持活动状态,而不再由我的应用程序调用?

例如,如果我打开HTTP流,然后不刷新,但继续打开新的流,则所用的内存将继续增加,直到GC通过清理为止。是否有可能以某种方式查看在给定的时间x内已生成并未使用的线程或对象等?

发出此请求的原因是由于在服务器上部署了应用程序,这会继续增加内存,直至达到限制,从而迫使GC干预以重新建立稳定的内存状况。 / p>

我不知道这对分析是否有帮助,但是gcc参数设置为:

-Xms8g -Xmx8g -XX:PermSize = 1024 XX:MaxPermSize = 1024

机器的重量是18克。

感谢所有人

1 个答案:

答案 0 :(得分:0)

要检查是否仍使用对象,请执行完整的GC。此操作没有捷径可言。

在执行垃圾回收之前,您不知道是否需要对象。

  

使用的内存将继续增加,直到GC通过清理为止。

这在JVM中很正常。为了提高性能,您想重用昂贵的对象,而不必过多担心廉价的对象。您还需要调整GC,以使其在运行时不会对您的应用程序产生太大影响。

注意:Perm Gen已从Java 8中删除,从2019年3月开始,只有Java 12可以从Oracle获得免费更新,因此需要在某个时候考虑进行升级。