0

enum クラスに jsps/サーブレットのリストを持つ定数クラスがあります。このクラスは、コントローラ サーブレットからリダイレクトとして機能するために使用されます。この特定のクラスは、メモリ アナライザーで常にリークの疑いがあるものとして表示されます。

ここにコントローラーサーブレットのコードを貼り付けます。

 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/login/updateProfileConfirm.jsp", "プロフィールを確認") public String 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 上にあります。

4

1 に答える 1

5

列挙型には 301 個の値があるため、その列挙型の 301 個のインスタンスが常に RAM にあると思われます。これは正常であり、これらのインスタンスは列挙型クラスに静的にリンクされているためです。これはリークではなく、列挙型がどのように機能するかです。

メモリ アナライザーは、再利用できない 13,244 バイトがあることを示しているだけで、これはリークとして表示される可能性がありますが、そうではありません。列挙型について知らないのは奇妙です。おそらく、列挙型に多くのバイトを含む 301 の値があるとは予想していませんでした。通常、列挙型にはいくつかの要素があり、限られた量の値を格納していますが、次のような列挙型を使用しても問題はありません。あなたの「ページ」。

于 2012-08-01T03:25:48.980 に答える