[英]Java JVM Keep Memory Allocation Against Operating System
我在Windows 7 64bit上運行1.6.0_25 64bit。
我試圖讓JVM在最大內存下運行,因為我的應用程序占用大量內存...但是可悲的是...內存分配沒有建立,並且Windows出現了很多Page Faults來繼續帶來下一組虛擬內存。
我正在運行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和float的對象的ArrayLists。
這樣做,我發現我的Java內存沒有被交換(因此,我認為堆內存與此處的堆棧有所不同)[哦,我也將所有代碼也更改為靜態類型-我知道,非常糟糕編程風格]
我現在遇到的問題是如何處理我的HashMap ...嘗試建立查找表的所有嘗試都因O(n ^ 2)運行時間而失敗!!!
Java竭盡全力將其所有應用程序保留在內存中,或者換種方式,它作為最終手段換出了,因為如果將其任何內存換成磁盤,它的性能都會很差。
如果您的Java應用程序正在交換到磁盤,則是因為您的應用程序為您的系統使用了過多的內存。 如果您的應用程序占用大量內存,並且您必須使用這么多的內存,那么我建議您確保系統具有足夠的內存。 順便說一句。 您可以以$ 500的價格購買具有8 GB的服務器,並以$ 1000的價格購買新的16 GB工作站。 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.