今天注意到了某種有意義的東西,但我無法準確解釋語義。Java內存和Windows
基本上我創建一個普通的老java main
方法,並在它有一個永無止境的while循環。在這個循環中,我創建了一些字符串並將它們放在一個HashMap中。我真正想要的是一個運行並在一段時間內建立內存利用率的進程。
public class Test {
public static void main(String[] args) throws InterruptedException {
final HashMap<String, String> names = new HashMap<String, String>();
while(true) {
names.put(new Date().toString(), "lskjflksjdflksjdflkjsieurlskjflksn,kdsgkjsdlkfjslkdjfs");
Thread.sleep(50);
}
}
}
的過程開始-Xms512m -Xmx512m
。
一旦開始,我可以使用procexp.exe
來查看我的java進程。我試圖理解的是虛擬內存和物理內存。虛擬存儲器(專用字節)似乎映射到所請求的jvm大小,即512MB。從過程的概況中,我假設物理內存(工作集)是進程使用的實際內存,隨着時間的推移,隨着我的進程生成更多的字符串值並填充地圖,這些內存正在逐漸增加。它總是比512MB少很多。
所以我的問題是,爲什麼Java使用虛擬內存?
難道這不全是在物理內存嗎?
因爲我使用虛擬內存,這是否意味着它交換到磁盤?
性能不好嗎?
有沒有辦法強制它在RAM中以獲得更好的性能?
在Windows上這種事情的任何好的文章將是偉大的。
我建議用VisualVM來觀察這個過程。 GC將確保每個頁面都被觸摸,從而將其強制存入內存。 –