Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 带自动加载的Apache Tomcat单例复制_Java_Tomcat_Memory Leaks_Singleton_Classloader - Fatal编程技术网

Java 带自动加载的Apache Tomcat单例复制

Java 带自动加载的Apache Tomcat单例复制,java,tomcat,memory-leaks,singleton,classloader,Java,Tomcat,Memory Leaks,Singleton,Classloader,我正在开发一个基于tomcat的web应用程序使用的框架 出于几个原因,我有时被迫使用单例模式 当我使用autoload执行部署(移动webapps文件夹中的war文件)时,我注意到以前的singleton实例从未释放。 每次以这种方式执行部署时,singleton类的一个新实例将被放置在堆中(web应用程序只使用正确的实例)。我担心这会导致内存泄漏。 我有一个堆转储来证实这一点 我知道在生产环境中使用自动加载功能不是一个好的实践,但我正在开发一个可能被许多人使用的框架。 这样我猜不出他们的部署

我正在开发一个基于tomcat的web应用程序使用的框架

出于几个原因,我有时被迫使用单例模式

当我使用autoload执行部署(移动webapps文件夹中的war文件)时,我注意到以前的singleton实例从未释放。 每次以这种方式执行部署时,singleton类的一个新实例将被放置在堆中(web应用程序只使用正确的实例)。我担心这会导致内存泄漏。 我有一个堆转储来证实这一点

我知道在生产环境中使用自动加载功能不是一个好的实践,但我正在开发一个可能被许多人使用的框架。
这样我猜不出他们的部署策略

我猜您的情况可能类似于您可能有多个类装入器的情况?见例。希望有帮助,不是这个案子。我确信Singleton模式是以正确的方式实现的(我使用了ENUM实现)。servlet容器使用特定的web应用程序类加载器。问题是垃圾回收器无法对此对象执行操作,因为这些对象本身有一个引用。。。我不知道在热部署之后如何避免这种影响