发布Java web应用程序范围的静态资源
我有一个应用程序范围的静态资源,我将在ServletContext初始化时对其进行初始化 这是我的密码:发布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
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?
}