84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
通过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
小伙看你根骨奇佳,潜力无限,来学PHP伐。
因為有作業系統的記憶體管理機制存在, 每個行程都會分配一個虛擬的位址空間(對應32位元系統, 則是4G 虛擬行程位址空間). 虛擬位址空間的有一部分記憶體位址對應到實際的實體記憶體中, 當進程所需的記憶體大於實際的物理記憶體時, 則它的有一部分虛擬記憶體位址會映射到磁碟上. 由於這個機制的存在, 因此進程就好像可以使用到比實際物理記憶體還要大的記憶體空間.
4G
對於你的問題, JVM 需要3G 的內存空間, 而實際機器只有1G, 因此操作系統會將JVM 進程中暫時用不到的內存存入磁碟(即Swap space), 當JVM 需要使用到另外一部分內存時, 則透過記憶體交換(Memory Swap), 將磁碟中的資料寫入記憶體. 因此如果頻繁發生Memory Swap, 那麼程式必然很慢.
Memory Swap
還有虛擬記憶體可以用。 你把虛擬記憶體調小或直接停用就不行了。
因為有作業系統的記憶體管理機制存在, 每個行程都會分配一個虛擬的位址空間(對應32位元系統, 則是
4G
虛擬行程位址空間). 虛擬位址空間的有一部分記憶體位址對應到實際的實體記憶體中, 當進程所需的記憶體大於實際的物理記憶體時, 則它的有一部分虛擬記憶體位址會映射到磁碟上. 由於這個機制的存在, 因此進程就好像可以使用到比實際物理記憶體還要大的記憶體空間.對於你的問題, JVM 需要3G 的內存空間, 而實際機器只有1G, 因此操作系統會將JVM 進程中暫時用不到的內存存入磁碟(即Swap space), 當JVM 需要使用到另外一部分內存時, 則透過記憶體交換(Memory Swap), 將磁碟中的資料寫入記憶體. 因此如果頻繁發生
Memory Swap
, 那麼程式必然很慢.還有虛擬記憶體可以用。
你把虛擬記憶體調小或直接停用就不行了。