Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java simple webapp内存泄漏的原因是什么?_Java_Tomcat_Memory Leaks - Fatal编程技术网

Java simple webapp内存泄漏的原因是什么?

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

非常简单的webapp,但tomcat在取消部署后发现内存泄漏

以下web应用程序已停止(重新加载、取消部署), 但是它们以前运行的类仍然加载在内存中,因此 导致内存泄漏(使用探查器确认):/WEBSearchPrime\u 3

原因是什么

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]