java - 如何在运行时监视某些java方法分配的内存

标签 java heap-memory

我正在创建一个 java 程序,其中我的类假设 A 具有一些预定义的行为。但是用户可以覆盖我的类来改变它的行为。所以我的脚本将检查是否有一些子类,我称之为行为,但如果他在他的代码中编写了一些阻塞代码或内存泄漏怎么办。

这可能会损害我的进程。 Java 中是否有任何方法可以监视通过某种方法分配的内存。

请提出建议。

最佳答案

but what if he has written some blocking code or memory leek in his code

首先我建议你好好记录你的类(class)。描述用户可以做什么,不可以做什么。给用例做什么(如果可能的话)。

对于阻塞代码部分,如果您有一些时间问题,您可以将方法的执行包装在 Future 中,然后让 ExecutorService 执行代码。这样,如果执行时间过长,您将能够取消执行。

关于内存泄漏问题,我想你不是在谈论内存泄漏,而是调用覆盖方法导致的内存消耗增加。 java中的内存泄漏毕竟是很少见的。

您将无法检测方法的内存消耗,这不是 java 的工作方式。内存是全局的。例如,如果加载了一个外部库(JNI),或者调用了类路径中的某个库现在将使用更多内存,您会怎么做?你就是不知道。

除了监控整体内存消耗,没有别的办法(如果我错了请告诉我)。

关于java - 如何在运行时监视某些java方法分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19049058/

相关文章:

hadoop - HBase 区域服务器崩溃

Java垃圾回收: what is virtual space in parallel collector?

android - 如何动态清空或清除堆内存

c# - 在 C# 中将结构实例作为类的成员

java - 通过引用传递 Error 对象而不是从方法抛出异常是一个好主意吗?

java - HBase读取数据返回null

java - 哪些 API 可用于从 Gemplus 智能卡 (PKCS11) 读取证书

java - 如何调试位于堆上的对象?(eclipse-java)

java - 响应式 JDK 8 中的 if/else

java - 不能缩短具有大字符串数字的字符串数组