我有一个使用 java 线程池在后台执行一些繁重处理的应用程序。
线程池配置为记录执行期间发生的异常
public enum ExceptionLogger implements Thread.UncaughtExceptionHandler {
INSTANCE;
private static final Logger log = LoggerFactory.getLogger(ExceptionLogger.class);
@Override
public void uncaughtException(Thread t, Throwable e) {
log.error("Exception occurred at thread " + t.getName() + "\n", e);
}
}
在我的应用程序日志中,我随机获取,java.lang.OutOfMemoryError: Java heap space
但如果我使用记录内存使用情况,Runtime.getRuntime().freeMemory()
我可以看到大量可用的可用堆空间。
此外,在我收到此异常后,应用程序继续工作。
OutOfMemoryError
收到此消息还有其他原因吗?