java - 记录OutOfMemoryError的JVM中的全局状态?

标签 java jvm out-of-memory

我们必须处理一个执行以下操作的类库

catch(Throwable e) {log.error("some message", e)}

但忽略该问题。除了如 https://stackoverflow.com/a/3878199/2954288 中所述运行外部命令之外,JVM中是否有一些内部全局状态可以查询以查看自启动以来是否发生了OutOfMemoryError?

我的问题不重复:Is it a bad practice to catch Throwable? 。我不是问是否或 我们不应该catch(Throwable)。我想问是否存在某种处理方法。

最佳答案

Is there some internal global state in the JVM that can be queried to see if an OutOfMemoryError has happened since the startup

是的,有一个变量out_of_memory_reported 。它是内部,不应该从外部读取。尽管您可以使用 gdb 来完成此操作,例如:

$ gdb -p PID

(gdb) p 'report_java_out_of_memory(char const*)::out_of_memory_reported'
$1 = 0

如果您想要一种可靠的方法来拦截 Java 应用程序中的所有 OutOfMemoryErrors,无论它们是否被捕获,您都可以使用 JVMTI Exception Callback 。 示例可参见 here .

关于java - 记录OutOfMemoryError的JVM中的全局状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139116/

相关文章:

java - 我如何在java中比较两个JSONArray?

javax.ws.rs.core.Application 构造函数被调用两次

python - 数据占用多少 RAM?

java - 迁移到 Java 8 时的 Swing 布局问题

java - JVM退出代码1073807364的原因是什么?

java - 从 JVM 内部访问 JMX

java - eclipse下tomcat中Heap/PermGen设置问题

java - 为什么没有 OutOfMemoryError 子类?

java - org.postgresql.jdbc.PgResultSet 实例和 io.vertx.core.impl.VertxThread 内存泄漏

java - 既然 Lucene 4.1 中不存在 TermEnum,那么如何从 IndexReader 获取字段呢?