枚举类中的内存泄漏

use*_*352 0 java jsp memory-leaks tomcat6

我们有一个常量类,它在枚举类中有一个jsps/servlet列表.该类用于从控制器servlet充当重定向.这个特殊的类总是在内存分析器中显示为泄漏可疑.

我在这里粘贴来自控制器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;
    }
Run Code Online (Sandbox Code Playgroud)

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

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

    return this.title;
}


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

public void setFileName(String newFileName) {
    this.fileName = newFileName;
}
Run Code Online (Sandbox Code Playgroud)

我无法理解的是为什么这堂课应该泄漏?一旦我删除了Page的引用并直接重定向,问题似乎就消失了.没有框架,简单的servlet-jsp框架.应用程序服务器是Tomcat 6和JDK 6.

Sim*_*nni 5

我怀疑因为枚举有301个值,所以枚举中总有301个实例,这是正常的,因为这些实例静态链接到枚举类.它不是泄漏,它只是枚举的工作原理.

内存分析器只是告诉你有13,244个字节无法回收,这可能会显示为泄漏,但事实并非如此.奇怪的是,它不知道枚举,可能只是没想到枚举有301个值包含很多字节,通常枚举有一些元素,存储有限数量的值,但是有一个枚举像是没有错你的"页面".