我在Windows 7 64bit上運行1.6.0_25 64位。Java JVM保持對操作系統的內存分配
我想讓JVM以最大的內存運行,因爲我的應用程序內存密集,但可惜......內存分配不會建立起來,並且有很多從Windows的頁面錯誤繼續帶來在接下來設置虛擬內存。
我正在運行的Java -Xms2G -Xmx3G測試
下面的代碼是我把整個文件中......這樣,我就不會遇到頁面錯誤的嘗試讀入。
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 [] []握着我的數據,而不是含有INT的對象保持的ArrayList和浮動的。
這樣做,我發現我的Java內存不會被交換(所以,我想堆內存有點不同於堆棧在這裏)[哦,我沒有改變所有的代碼靜態類型以及 - 我知道,非常糟糕的編程風格]
現在我遇到的問題是如何處理我的HashMap ...我試圖建立一個查找表的所有嘗試失敗O(n^2)運行時間建立!!!
所以,如果我得到這個權利,你試圖有目的地創建一個內存泄漏?或者你需要文件始終存在於內存中?我有興趣瞭解您的使用案例。 – lobster1234 2011-04-25 10:34:59
加載文件後,您是否保留對「byte []文件」的引用?你的系統有多少內存?你的其他代碼用這個文件做什麼? – WhiteFang34 2011-04-25 10:37:04
其實...我最初使用BufferReader讀取1GB文件並處理輸入和輸出到BufferedWriter ... 該系統應該創建近5GB的處理數據。 令人難過的是,觀察內存使用情況,它在6小時內從30K增加到.5G的速度非常緩慢,而且每增加k個字節,又增加了一個或兩個IO讀取操作...... – 2011-04-25 10:41:14