什么时候调用gc

时间:2011-10-20 05:11:39

标签: java playframework

我正在使用play框架。无论是否现在使用,我都希望每次都保持我的一个目标,因为它将在以后使用。

创建对象是一个耗时的过程(包含10L记录)。如果一段时间没有访问该对象,则该对象是gc'ed。

我的想法是访问该对象并在它被gc之前保持活着状态。我尝试使用@Before注释访问函数中的对象,但它不起作用。我的主要想法是保持对象的活力。如果我知道在调用gc函数的时间后,我可以使用playframework中的作业功能来保持它的活跃。

2 个答案:

答案 0 :(得分:4)

如果不再引用该对象,则垃圾收集器将仅清理对象。您的设计应确保此特定对象存在并且至少由一个变量引用,以确保在垃圾回收期间不会将其删除。

你可能想在这里使用Singleton风格的设计模式进行调查,它会确保有一个对象的引用,但是一次只有一个对象。

这样,对象不会被垃圾收集,因为它被至少一个变量引用。

我希望这会有所帮助。

答案 1 :(得分:2)

您似乎误解了垃圾收集的工作原理。如果您在某个地方保留对象的引用,您可以将其移交给预定作业,那么该引用本身将阻止对象被收集。唯一不适用的方法是使用(n)(evil) singleton object获取对相关对象的引用,并定期用任务“触摸”该对象将不会禁止垃圾收集。简单的解决方案是不使用那种(邪恶的)模式。你的问题的实际答案很简单,“如果你没有完成一个对象,那么就不要放弃对它的引用。”这是一个非常自然的解决方案。