我们有一个常量类,它有一个枚举类中的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;
}
页本身是一个枚举类这样的代码..
UPDATE_PROFILE_CONFIRM(“/ WEB-INF/JSP /登录/ updateProfileConfirm.jsp”,‘确认您的个人资料’) 公共字符串的getTitle(){
return this.title;
}
public String getFileName() {
return this.fileName;
}
public void setFileName(String newFileName) {
this.fileName = newFileName;
}
我什么无法理解的是,为什么这个类应该泄露?一旦我删除了Page的引用并直接重定向,问题似乎就消失了。没有框架,简单的servlet-jsp框架。应用程序服务器是Tomcat 6和JDK 6.
为什么用'new String()'初始化'String str'?为什么不让它成为'String pageName = jspPage.name();'或者就此而言,为什么要把它作为一个变量出来呢? 'jspPage.name()'是非常好的自我文档。 – 2012-08-01 02:07:54
好吧..这是真的,但我不认为这本身可以导致任何泄漏。 – user546352 2012-08-01 02:21:41
“这个特定的类总是在内存分析器中显示为泄漏可疑。”你是指页面枚举?它是否告诉你堆中有多少个实例? – 2012-08-01 02:23:33