gpt4 book ai didi

java - 释放 Java Web 应用程序范围内的静态资源

转载 作者:行者123 更新时间:2023-12-01 13:47:32 25 4
gpt4 key购买 nike

我有一个应用程序范围的静态资源,我将在 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) { ... }
}

StaticResource 将被打包成 MyJar.jar,并将该 jar 放入 myWebApp/WEB-INF/lib 中。我添加此信息是为了让我们知道 StaticResource 仅适用于我的应用程序(不共享)

我初始化的代码如下:

    @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?
}

MyBean 类非常简单,只包含一些类型为 Class、Primitives、Method 的属性,...

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

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

最佳答案

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

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

关于java - 释放 Java Web 应用程序范围内的静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20249627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com