java - 如何检查哪些线程或对象仍在使用或未使用?

标签 java garbage-collection jvm

谁能告诉我如何查看哪些 Activity/线程保持 Activity 状态并且不再被我的应用程序调用?

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

此请求的原因是由于服务器部署了应用程序,这会不断增加内存直至达到极限,从而迫使 GC 进行干预以重新建立稳定的内存情况。

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

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

机器的内存为18g。

提前感谢大家

最佳答案

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

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

the memory used will continue to go up until the GC passes to clean up.

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

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

关于java - 如何检查哪些线程或对象仍在使用或未使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55257896/

相关文章:

java - 在 JDT AST 中,如何从 MethodInvocation 节点检索 MethodDeclaration 节点?

Java双缓冲——访问后像

Java 8 元空间垃圾回收

python - Numpy:切片后的垃圾收集

java - 用于调试目的的命名 (toString) Lambda 表达式

java - 通过Java程序连接Oracle

java - 寻找一个Android XML教程

java - Full GC 后 OldGen 使用率上升

apache-spark - 为什么每个 JVM 只允许一个 SparkContext?

java - 指定Java虚拟机的内存限制有什么好处?