-1
String type = “ClassNames”;
MyInterface mi = (MyInterface) constructor.newInstance(type);

上記のコード スニペットが私のプログラムで複数回 (約 3000 クラス) 呼び出され、ヒープ領域不足エラーが発生します。ヒープサイズは 1024mb に達します。ヒープサイズを低く保つための回避策はありますか? ありがとう!

インターフェイス

public interface MyInterface { 
    public String[] getRowHeader(); 
    public String[] getHeaderTable();    
    public String[][] getDataForSearch();
    public String getInfoText();
}

パブリック クラスの実装

public TablePanel() {
    try {
        guiInit();
    } 
    catch (Exception exception) {
        exception.printStackTrace();
    }
}

この guiInit() は、swing コンポーネントの初期化を行います。

同じクラスで、メソッドは以下のように実装されます

public String[][] getDataForSearch()  
{
    return rowNames;
}
4

1 に答える 1

1

コードで何をしているのかを知らずに、誰もあなたを助けることはできません。解決策は、あなたが何をしているかに大きく依存します。

メモリリークはありますか?同様に、不要になったオブジェクトインスタンスへの参照をまだ保持しているため、GC がメモリを解放できませんか?

本当に多くのインスタンスが必要な場合は、Fly-weight パターンを使用するか、作成済みのインスタンスを再利用するか、スペース効率の高いインスタンスを使用するなど、クラスの再設計を行ってメモリの消費量を減らすことを検討してください。データ構造など

また、多くのオブジェクトを割り当てる必要がないように、ロジックを再設計することを検討してください。たとえば、アプリケーションが入力ファイルを処理している場合、「ファイル全体を読み取り、すべて POJO に変換してからロジックを実行する」ことは避けてください。「ファイルを部分的に読み取り、対応する POJO を作成し、その部分のロジックを実行してから、次の部分に進む」ことができるかどうかを確認してください。

于 2012-11-29T06:13:25.410 に答える