我們有一個常量類,它有一個枚舉類中的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