簡體   English   中英

運行一些Java應用程序,其總堆大小內存設置為超過phisycal內存

[英]Running a few java applications with total heap size memory set to more than phisycal memory

想象一下,我有一台64位機器,內存總量(物理+虛擬)等於6 GB 現在,當我同時使用-Xmx2048m運行5個應用程序時會發生什么? 它們不會在啟動時失敗,因為這是64位操作系統,但當它們都需要使用我為它們設置的2GB內存時會發生什么?

問題:是否可能存在內存泄漏或其他問題? 會發生什么? 這樣做有什么可能的后果?

我已經讀過這些問題: 這個這個問題 ,但它們實際上並沒有回答我的問題,因為我想運行多個不超過內存限制的應用程序,但它們一起完成。

您將體驗到的是在主要垃圾收集期間增加交換,從而增加GC暫停時間。

當使用的內存超過物理內存時(實際上甚至在此之前),現代操作系統會將一些較少使用的內存寫入磁盤。 使用JVM,這很可能是堆的終生代的一些部分。 當主要GC發生時,它將不得不觸及所有堆,因此它必須在它卸載到磁盤的所有頁面中交換回來,導致大量的IO活動和增加的CPU負載。

由於一個JVM的堆應該很容易適應物理內存,但是由於一個JVM的堆超出物理內存或者來自多個JVM的同時主​​要GC,這可能會導致大量的交換,因此有多個主要GC的JVM可能會稍微增加暫停時間。進出內存頁面(“捶打”)和GC可能需要一段時間(最多幾分鍾)。

Xmx僅保留虛擬地址空間。 它是虛擬的而不是物理的。

此設置的響應取決於操作系統:

Windows:限制由swap + physical定義。 例外是大頁面(需要使用組策略設置啟用),這將通過物理ram限制它(XMS是不可能的)。

Linux的行為更復雜。 (它取決於vm.overcommit_memory和相關的sysctls以及mmap系統調用中的各種標志)可以(但不是全部)由JVM配置標志控制。 行為可以是: - Xms可以超過總ram + swap - Xmx受可用物理ram的限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM