為什麼將 Xms和 Xmx設定為相同的值?

2021-10-12 05:00:39 字數 806 閱讀 3908

我從許多文獻中讀到,建議將

-xms

和-xmx

設定為相同的值。但是沒有給出任何原因。

在生產環境中,如果監視

gc資料,您會注意到這是相對較短的時間段(通常少於一小時),

jvm最終會將堆大小增加到

-xmx

設定。每次

jvm增加堆大小時,它都必須向作業系統請求額外的記憶體,這會花費一些時間(因此會增加

gc命中時正在處理的所有請求的響應時間)。通常,

jvm永遠不會放過那種記憶。因此,由於

jvm最終將獲取

-xmx

記憶體,因此您最好在開始時將其設定為該記憶體。

另一點是,使用較小的堆大小(以

-xms

開頭),

gc將更頻繁地發生。因此,從較大的堆開始,

gc發生的頻率就不會那麼高。

最後,在生產環境中,通常每個作業系統(或每個

vm)僅執行乙個應用程式伺服器。因此,由於應用程式伺服器不會與其他應用程式競爭記憶體,因此您最好預先為其分配記憶體。

請注意,以上內容僅供生產。它也適用於系統測試環境,因為系統測試環境應盡可能模擬生產。

對於開發,使

-xms

和-xmx

不同。通常,您在開發中的應用伺服器不需要做很多任務作,因此它通常會保留

-xms

堆設定。此外,由於在開發過程中,應用伺服器將與許多其他應用(郵件客戶端,文字處理器,

ide,資料庫,瀏覽器等)共享計算機,因此將

-xms

設定為較小的大小可以使應用伺服器與也在爭奪相同資源的其他軟體。

為什麼將指令cache和資料cache相分離?

為什麼將指令cache和資料cache相分離?主要是為了避免資源衝突,在五級指令流水線中,分為if 取址 id 解碼 exe 執行 mem 訪存 wb 寫回 當然也不一定是五級,現在處理器流水線的長度都在15級左右。但是if和mem這兩步總是有的。其中if和mem都會訪問cache。但是if訪問ca...

析構函式為什麼設定為虛函式

1.第一段 include using namespace std class clxbase clxbase void dosomething class clxderived public clxbase clxderived void dosomething int main 執行結果 do ...

C 為什麼設定基類的析構函式為虛函式

物件的析構函式呼叫順序是從派生類到基類 那麼如果基類的指標指向派生類的物件 還能正常的執行析構順序嗎 下面看乙個類的宣告 cpp view plain copy class subject class concretesubject public subject 建立基類的指標 並刪除該物件 cpp...