java - 枚举类内存泄漏

标签 java jsp tomcat6 memory-leaks

我们有一个常量类,它在枚举类中包含 jsps/servlet 列表。 Controller servlet 使用此类来充当重定向。这个特定的类始终在内存分析器中显示为泄漏嫌疑对象。

我将 Controller servlet 中的代码粘贴到此处:

 protected void forwardPage(Page jspPage, boolean checkTrail, HttpServletRequest request, HttpServletResponse response) {
 String temp;
 String str = new String();

 str = jspPage.name();

Page page1 =  Page.valueOf(Page.class,str);
    try {
        temp = page1.getFileName();
        getServletContext().getRequestDispatcher(temp).forward(request, response);  
    } catch (Exception se) {
    } finally { 
        page1 = null;
        jspPage = null;
        str = null;
        temp = null;
    }

Page 本身是一个枚举类,其代码如下..

UPDATE_PROFILE_CONFIRM("/WEB-INF/jsp/login/updateProfileConfirm.jsp", "确认您的个人资料") 公共(public)字符串 getTitle() {

    return this.title;
}


public String getFileName() {
    return this.fileName;
}

public void setFileName(String newFileName) {
    this.fileName = newFileName;
}

我不明白的是为什么这个类应该泄漏?一旦我删除了页面的引用并直接重定向,问题似乎就消失了。没有框架,简单的servlet-jsp框架。应用程序服务器是 Tomcat 6,基于 JDK 6。

最佳答案

我怀疑,由于枚举有 301 个值,因此 RAM 中始终存在该枚举的 301 个实例,这是正常的,因为这些实例静态链接到枚举类。这不是泄漏,这只是枚举的工作方式。

内存分析器只是告诉您有 13,244 字节无法回收,这可能会出现泄漏,但事实并非如此。奇怪的是它不了解枚举,可能只是没想到枚举有包含大量字节的 301 个值,通常枚举有几个元素,存储有限数量的值,但是有一个像这样的枚举没有什么问题您的“页面”。

关于java - 枚举类内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11751614/

相关文章:

java - Spring Boot应用程序中的sessionFactory不会创建

java - isSticky按钮当前状态Android

java - 如何在jsp中获取日期值并将其更新到mysql

Java类依赖, "import"如何在文件系统中找到该类

java - struts2从2.3.16更新到2.3.32(修复S2-045)后,JSP文件无法解析某些Object的字段

java - 过滤器链中 Spring security 抛出的格式化异常消息

java - 如何使用 java 解析 XOP/MTOM SOAP 响应?

java - 用于更改多个文件中的字符串的脚本

mysql连接无法使用tomcat进行JSP部署

linux - 打开 GTS 构建失败