Java simple webapp内存泄漏的原因是什么?
非常简单的webapp,但tomcat在取消部署后发现内存泄漏 以下web应用程序已停止(重新加载、取消部署), 但是它们以前运行的类仍然加载在内存中,因此 导致内存泄漏(使用探查器确认):/WEBSearchPrime\u 3 原因是什么Java simple webapp内存泄漏的原因是什么?,java,tomcat,memory-leaks,Java,Tomcat,Memory Leaks,非常简单的webapp,但tomcat在取消部署后发现内存泄漏 以下web应用程序已停止(重新加载、取消部署), 但是它们以前运行的类仍然加载在内存中,因此 导致内存泄漏(使用探查器确认):/WEBSearchPrime\u 3 原因是什么 package mainThread; public class GeneralThread implements Runnable { private boolean stop = false; @Override publi
package mainThread;
public class GeneralThread implements Runnable {
private boolean stop = false;
@Override
public void run() {
while (!Thread.interrupted()) {
try {
Thread.sleep( 1000 );
} catch (InterruptedException e) { }
if(isStop()) {
System.out.println("Exit");
return;
}
System.out.println("DO TASK");
}
}
public boolean isStop() {
return stop;
}
public synchronized void setStop() {
this.stop = true;
}
}
package mainThread;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class AppServletContextListener implements ServletContextListener {
Thread thread;
GeneralThread generalThread;
@Override
public void contextInitialized(ServletContextEvent arg0) {
generalThread = new GeneralThread();
thread = new Thread(generalThread);
thread.start();
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
generalThread.setStop();
thread.interrupt();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Context destroyed!");
if(thread.isAlive()) System.out.println("thread is still alive...");
}
}
webapp是否打印“退出”而不是“线程仍处于活动状态…”。。。“?是的,它打印:
退出上下文已销毁!2014年3月30日下午3:50:45 org.apache.openejb.assembler.classic.assembler应用程序信息:取消部署应用程序:C:\apache-tomee-webprofile-1.6.0\webapps\WEBSearchPrime_3 2014年3月30日下午3:50:46 org.apache.catalina.startup.HostConfig删除重新部署资源信息:取消部署上下文[/WEBSearchPrime_3]