在内存耗尽之前做些什么

5

在Java中,是否有一种方法可以在内存不足之前执行某些操作。例如,在内存即将耗尽时保留以前文档状态的列表(用于撤消),并仅删除非常旧的状态?


可能是https://dev59.com/eHE85IYBdhLWcg3wpFKu,https://dev59.com/LnI-5IYBdhLWcg3wwLW3和https://dev59.com/8XA75IYBdhLWcg3w3NLf的重复问题。 - BalusC
1
它们是关于捕捉OOME,而这则是关于防止它发生。 - Bart van Heukelom
2个回答

2
例如,保留先前文档状态的列表(用于撤消),并仅在内存即将耗尽时删除非常旧的状态?您可以使用SoftReference来做一些事情。还请注意java.lang.ref包的通用文档。如果对象只能通过SoftReference访问,它们将在发生内存不足错误之前被垃圾回收。但是,请注意,VM在此类事件之前不需要保留这些引用或对其进行任何清除顺序的保证。最好将它们与某种形式的持久性结合使用。

1

是的,这是完全可能的。

我可能会使用SoftReference列表来存储您先前的文档状态。这些引用保证在内存不足异常发生之前被处理掉。

在一定时间间隔内,您可以清除列表中的空引用。

我还建议保留对最新状态的普通引用,以便您始终可以保证至少有一个撤销操作 :-)

这将取决于JVM实现,但如果您很幸运,JVM将保留最近的状态并处理旧状态。这在JVM规范中并不是严格要求,但是建议这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接