2012-07-11 36 views
4

Eclipse在我的UNIX计算机上发出内存不足异常,拥有jdk 1.6.尝试多次运行我的web应用程序而不终止本地应用程序服务器。 然后通过vm参数增加我的堆空间,并尝试更改Eclipse.ini。 但没用。是FileCleaner以避免Web应用程序中的多个部署?

Google搜索了一段时间 并且知道它是webapp classLoader多个部署的问题。我无法找到解决这个问题的方法。请给出一个解决方案来解决这个问题。

我发现使用FileCleanerFileCleaningTracker)为避免LogoutServlet多种部署和编写的代码。

@Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
     req.getSession().invalidate(); 
     FileCleaner.getInstance().exitWhenFinished(); 
     resp.sendRedirect("/index"); 
    } 

但它不工作。

在此先感谢。

回答

0

我不太了解FileCleaner,但是对javadoc状态的粗略回顾称调用exitWhenFinished()会杀死后台线程来删除文件。我对此的看法是,这些文件不会被删除。

我的猜测是你的问题实际上是一个热插拔代码的标准问题:在PermGen空间之外。发生这种情况是因为有些类定义永远不会被删除,并且当您停止/启动servlet时,这些部分会在JVM中累积。

对这个问题最简单的答案是创建一个足够大的PermGen空间让你完成工作。尝试将其添加到应用程序服务器的虚拟机参数中。

-XX:MaxPermSize=128M 

这应该允许您在耗尽内存之前工作更长时间。该数量可能会增加,具体取决于您的机器上的内存量。