在内存不足之前做一些事情

时间:2010-06-26 15:59:52

标签: java memory memory-management

Java是否有办法在耗尽内存之前做一些事情。例如,保留一个先前文档状态列表(用于撤消),并仅在内存即将耗尽时删除非常旧的状态?

2 个答案:

答案 0 :(得分:2)

  

例如,保留以前文档状态的列表(用于撤消),并仅在内存即将耗尽时删除非常旧的状态?

您可以使用SoftReference执行某些操作。另请注意java.lang.ref包的一般文档。如果只能通过SoftReference访问对象,则会在发生内存不足错误之前对其进行垃圾回收。但请注意,VM不需要在此类事件发生之前保留这些引用,也不需要保证可以清除它们的顺序。最好将它们与某种形式的持久性结合起来。

答案 1 :(得分:1)

是的,这当然是可能的。

我可能会为您之前的文档状态使用SoftReference列表。保证在发生内存不足异常之前将其丢弃。

在某个定期间隔,您可以清除列表中的空引用。

我还建议保持对最近状态的正常引用,以便始终保证至少一次撤消: - )

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