Java是否有办法在耗尽内存之前做一些事情。例如,保留一个先前文档状态列表(用于撤消),并仅在内存即将耗尽时删除非常旧的状态?
答案 0 :(得分:2)
例如,保留以前文档状态的列表(用于撤消),并仅在内存即将耗尽时删除非常旧的状态?
您可以使用SoftReference
执行某些操作。另请注意java.lang.ref包的一般文档。如果只能通过SoftReference
访问对象,则会在发生内存不足错误之前对其进行垃圾回收。但请注意,VM不需要在此类事件发生之前保留这些引用,也不需要保证可以清除它们的顺序。最好将它们与某种形式的持久性结合起来。
答案 1 :(得分:1)
是的,这当然是可能的。
我可能会为您之前的文档状态使用SoftReference列表。保证在发生内存不足异常之前将其丢弃。
在某个定期间隔,您可以清除列表中的空引用。
我还建议保持对最近状态的正常引用,以便始终保证至少一次撤消: - )
它将取决于JVM实现,但如果您幸运的话,JVM将保留最新的状态并处理最旧的状态。这在JVM规范中并不是严格要求,但是建议的行为。