Windows 7 64ビットで1.6.0_25 64ビットを実行しています。
私のアプリケーションは非常にメモリを集中的に使用するため、JVM を最大メモリで実行しようとしています...しかし悲しいことに...メモリ割り当てが構築されず、Windows から多くのページ フォールトが発生して、次のセットを保持し続けます。仮想メモリ内。
Java -Xms2G -Xmx3G Test を実行しています
次のコードは、ファイル全体を読み込もうとする試みです...読み込み中にページフォールトが発生しないようにします。
File f = new File("veryLARGEfile.txt");
FileInputStream in = new FileInputStream(f);
int i = (int) f.length();
System.out.println("Bytes in file: " + i);
byte[] file = new byte[i];
i = in.read(file);
System.out.println("Bytes read: " + i);
この方法を実行すると、Windowsタスクマネージャーで、ファイルの読み取り中にシステムが2G相当のメモリに達することがわかります...しかし、読み取りが完了すると...メモリは再び低下します!!!!
これは大きな問題です...アクティブなメモリにとどまるには、バイト配列全体が必要です。
ありがとう、エイ
int と float を含むオブジェクトの ArrayList を保持する代わりに、基本的な配列型 int[][] と float[][] を使用してデータを保持するようにコードを変更しました。
これを行うと、Javaメモリがスワップされないことがわかりました(したがって、ヒープメモリはここのスタックとは少し異なる方法で扱われると思います)[ああ、すべてのコードを静的型付けに変更しました-知っています、非常に悪いですプログラミングスタイル】
私が今直面している問題は、HashMap を処理する方法です...ルックアップ テーブルを構築しようとするすべての試みは、O(n^2) 実行時間で構築に失敗しています!!!