首页 > 解决方案 > 从 OOM 中恢复的“对冲”技术

问题描述

我正在开发一个在捕获到时关闭的服务OutOfMemoryError,该机制通过UncaughtExceptionHandler以下方式实现:

private byte[] hedge = new byte[0x10000];
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
  hedge = null;
  log.error(e);
  //signals the service to shut down whenever any thread crashes with an OOM
  Service.shutdown();  
});

我发现了几篇关于 OOM 恢复的旧文章,可以追溯到 2000 年代初,就像这篇文章一样,它们解释了“对冲”模式,在这种模式下,分配一个数组并在捕获 OOM 时取消引用它。

我想知道这种模式是否有意义并被真正应用?特别是,我怎么知道取消引用数组的空间没有立即被任何其他线程占用?

标签: javamemoryout-of-memory

解决方案


推荐阅读