java内存不行然后退出

han*_*age 2 java memory jvm out-of-memory exit

我有一个必须分析大文件的软件.限制输入或提供无限的内存不是一种选择,所以我必须忍受飞行的OOME.因为OOME只杀死了线程,所以我的软件运行在一些糟糕的状态.

从外面看,一切看起来都没问题,因为这个过程正在运行,但在内部却是脑死亡.

我想拔掉插头.但是我怎么能这样做呢?

捕获OOME并不保证下一行代码将被执行.例如System.exit(9).所以JVM必须注意到OOME和自己的陷阱.

他们有一些vm选项吗?

Pet*_*rey 8

当你得到一个OOME时,你的内存非常低,而且日志记录并不总是有效.解决这个问题的一种方法是使用一种关闭方法来保存一些在关闭之前不会释放的内存.

例如

 private static byte[] lastResort = new byte[256*1024];
 public static void handleOOME(OutOfMemoryError oome) {
     lastResort = null;
     try {
        LOG.fatal("Dying after ", oome);
     } finally {
        System.exit(-1);
     }
  }
Run Code Online (Sandbox Code Playgroud)

  • 有趣的方法!你在某个地方有生产吗? (2认同)