首頁  >  問答  >  主體

jvm - 关于java -Xms参数的疑问

通过java -X看到java -Xms的解释

-Xms<size> set initial Java heap size

但我测试发现,
虽然我的机器内存只有1G,但通过 java -Xms3G -Xmx3G appname可以成功启动应用,那么这个分配机制是怎么的呢?

就是指定了-Xms 3G,但机器内存只有1G的情况下,是怎样分配内存的?

注:

# free -m|grep Swap
Swap:            0          0          0
伊谢尔伦伊谢尔伦2765 天前499

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-04-18 10:23:06

    因為有作業系統的記憶體管理機制存在, 每個行程都會分配一個虛擬的位址空間(對應32位元系統, 則是4G 虛擬行程位址空間). 虛擬位址空間的有一部分記憶體位址對應到實際的實體記憶體中, 當進程所需的記憶體大於實際的物理記憶體時, 則它的有一部分虛擬記憶體位址會映射到磁碟上. 由於這個機制的存在, 因此進程就好像可以使用到比實際物理記憶體還要大的記憶體空間.

    對於你的問題, JVM 需要3G 的內存空間, 而實際機器只有1G, 因此操作系統會將JVM 進程中暫時用不到的內存存入磁碟(即Swap space), 當JVM 需要使用到另外一部分內存時, 則透過記憶體交換(Memory Swap), 將磁碟中的資料寫入記憶體. 因此如果頻繁發生Memory Swap, 那麼程式必然很慢.

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:23:06

    還有虛擬記憶體可以用。
    你把虛擬記憶體調小或直接停用就不行了。

    回覆
    0
  • 取消回覆