2016-09-23 55 views
1

我們不能給堆內存比系統物理內存給Java進程更多。我們可以使用的硬盤空間用於JVM內存

例子。 系統有8 GB RAM。 操作系統消耗假設2 GB RAM 我們啓動Java過程1和分配4 GB的RAM 我們啓動Java進程2和分配4 GB的RAM

如果RAM空間不可用,那麼Java程序使用硬盤的緩存來保存在程序中未使用的內存部分。

+0

它會非常慢 –

+0

對我來說目前沒關係,如果它很慢......是否有可能做到這一點? –

+2

這就是所謂的「交換」,它永遠是操作系統的標準功能。 –

回答

0
  1. 您應該記住-Xmx設置不是JVM分配的整個內存。它只是堆的大小(對象的空間),還會分配更多的空間。對於-Xmx4G整個內存分配可以是例如5Gb。
  2. 您可以交換JVM內存到磁盤,但隨後你的JVM會很慢。內存清理過程中的垃圾收集器通常需要掃描整個內存(即使是非常少使用的區域),因此在GC循環過程中會進行大量交換。
+0

今天我們可以放心地假設SSD在閱讀方面非常出色,至少500 MB/s。服務器級別超過1 GB /秒。 –

+0

@MarkoTopolnik它的RW訪問不是隻讀的。現代內存可以處理10GB/s以上的速度,因此差別非常大。 –

+0

由於所有的指針追蹤和分支預測失誤,實際上它會低於10 GB /秒。考慮到交換對性能的普遍期望,速度降低10倍仍然沒有太大差別。 –

相關問題