2010-03-15 98 views
4

我有一个CFC作为应用程序范围内的singletone对象。在ColdFusion CFC收集垃圾

其中一种方法用于海量数据处理并定期导致“Java堆空间”错误。

编辑该方法内部的所有变量都是VAR范围的,所以当invoke结束时,它们不应该保留在对象范围内。

它可以为Java的人有点愚蠢的问题,但我想知道Java垃圾收集器如何清理CFC方法内存:只有当整个请求结束,也许每个方法/函数invokation之后?

第二个选项很有趣,因为它可以让我将我的大方法分解为少数几个,作为可能的优化之一。

+0

你是否尝试过在CF管理员中增加可用的堆大小? – 2010-03-15 17:17:16

+0

@Ben,是的,我在Resin conf(使用Railo)做了它,但是目前有限的VPS RAM,这不会有很大的帮助。我只是想在购买更多内存之前尝试一些代码优化,至少我需要知道我不是“喂兽”:) – Sergii 2010-03-15 18:02:58

回答

2

众所周知,即使您尝试手动调用它,Coldfusion也不会执行垃圾收集,直到处理了当前请求之后。

+0

哦。这正是我想到的,幸运的是我已经有了一个解决方案。谢谢! – Sergii 2010-03-15 20:10:50

1

Java在没有引用对象后释放资源。你有单例应用程序作用域对象,这实际上意味着它永远不会释放它的实例变量和类变量。除了你会在你的代码中手动执行此操作。你应该展示一些代码来获得更多的建议,如何优化你的代码。

+0

谢谢,你提醒的是关于一个importand我忘了提及的东西:局部变量的范围。虽然我不确定是否可以在这里提供一些有用的代码示例,因为我的核心问题是关于更高级别的事情。 – Sergii 2010-03-15 16:37:24

+0

然后只要将它们的值设置为null,当你确定它们不再有用时就清理它们。 – Artic 2010-03-15 16:52:12