簡體   English   中英

G1GC:如何使用所有空閑內存?

[英]G1GC: How to use all free memory?

我嘗試在我的程序中使用 G1GC。 程序用於具有各種內存大小的各種機器:具有 1Gb 內存(最小)的 VPS、具有 8Gb 內存的台式機、具有 32Gb 內存(最大)的 DS。 我注意到即使有很多可用內存,G1GC 也不會保留更多內存(例如,G1GC 不會在我的機器上保留超過 3Gb 的內存,總共有 8Gb/4Gb 可用)

PS我想要通用的解決方案。 我無法為每種類型的機器創建單獨的版本或單獨的運行腳本。

我認為您選擇了錯誤的垃圾收集算法。 Java 8 文檔提供了以下指導:

選擇收集器

除非您的應用程序對暫停時間有相當嚴格的要求,否則首先運行您的應用程序並允許 VM 選擇一個收集器。 如有必要,調整堆大小以提高性能。 如果性能仍不能滿足您的目標,請使用以下指南作為選擇收集器的起點。

  • 如果應用程序的數據集很小(最多大約 100 MB),則選擇帶有選項-XX:+UseSerialGC的串行收集器。

  • 如果應用程序將在單個處理器上運行並且沒有暫停時間要求,那么讓 VM 選擇收集器,或者使用選項-XX:+UseSerialGC選擇串行收集器。

  • 如果 (a) 峰值應用程序性能是第一優先級並且 (b) 沒有暫停時間要求或 1 秒或更長的暫停是可以接受的,那么讓 VM 選擇收集器,或者使用-XX:+UseParallelGC選擇並行收集器.

  • 如果響應時間比總吞吐量更重要並且垃圾收集暫停必須保持短於大約 1 秒,則選擇帶有-XX:+UseConcMarkSweepGC-XX:+UseG1GC的並發收集器。

來源: 選擇收藏家

根據您的評論,您的目標似乎是獲得最佳性能; 即最大限度地減少在 GC 和相關開銷上花費的總時間。

這意味着您最好的選擇是:

  • 設置一些性能目標,讓 JVM 決定哪個收集器最好。 有關性能目標機制的詳細信息,請參閱基於行為的調優材料。
  • 如果您只有一個內核,請選擇 Serial GC。
  • 如果您有多個內核,請選擇 Parallel GC。

如果您想要一個適用於所有硬件的通用腳本,性能目標方法是最好的,但這意味着您將無法使用特定於平台的設置來(可能)改進 JVM 的決策。

暫無
暫無

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

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