Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 web应用程序范围的静态资源_Java_Garbage Collection - Fatal编程技术网

发布Java web应用程序范围的静态资源

发布Java web应用程序范围的静态资源,java,garbage-collection,Java,Garbage Collection,我有一个应用程序范围的静态资源,我将在ServletContext初始化时对其进行初始化 这是我的密码: public class StaticResource { private static Map<Class, MyBean> staticMap = new HashMap<>(); public static void add(Class clazz, MyBean b) { ... } public st

我有一个应用程序范围的静态资源,我将在ServletContext初始化时对其进行初始化

这是我的密码:

    public class StaticResource {
        private static Map<Class, MyBean> staticMap = new HashMap<>();

        public static void add(Class clazz, MyBean b) { ... }
        public static MyBean get(Class clazz) { ... }
    }
MyBean类非常简单,只包含一些类型为类、原语、方法等的属性

我的问题是在contextDestroyed函数中,是否必须将NULL设置为StaticResource.staticMap


据我所知,在卸载StaticResource类时(在执行contextDestroyed之后),staticMap将被销毁,因此不需要将NULL设置为staticMap。

您不必这样做,除非您的java代码捆绑在应用程序服务器libs上的jar中

取消部署应用程序时,应用程序服务器将丢弃分配给Web应用程序的
ClassLoader
。但是,如果您的代码位于服务器libs目录中,那么它将由应用程序服务器
ClassLoader
加载,因此不会被垃圾收集

    @WebListener
    public class AppListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        StaticResource.put ( Bean1.class, myBean_instance1);
        StaticResource.put ( Bean2.class, myBean_instance2);
            // ...
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // --- Do I need to set NULL to StaticResource.staticMap?
    }