Java如何處理多處理器機器上的GC和堆分配?多處理器機器上的Java堆和GC?
在我所做的閱讀中,在單處理器和多處理器系統之間使用的算法似乎沒有任何區別。 GC調優的科學技術看起來相當成熟,但在任何常見的JVM實現中我都找不到與此相關的任何內容。
作爲一個數據點,在.Net中,算法顯着變化:每個處理器都有一個堆,每個處理器負責堆。這在許多地方,如MSDN記載:
可擴展集合在多處理器系統上運行的服務器 版本的執行引擎(MSCorSvr.dll)中,託管堆是 分裂成幾個部分,一個每個CPU。當啓動一個集合 時,收集器每個CPU有一個線程;所有線程同時收集他們自己的部分 。 執行引擎(MSCorWks.dll)的工作站版本不支持此功能。
任何可以提供給特定於多處理器系統的Java GC調優的洞察力也是我感興趣的。
我看過各種JVM,沒有看到有關多進程系統中GC算法變化的細節。我期待着找到具有這種特徵的昂貴的商業實現,但是我發現......沒有。 –
其中一個原因可能是因爲,考慮它,*所有*我能想到的GC策略都是爲MP量身定做的......試圖找到適用於SingleProcessor的設計將會更具挑戰性(如果您忽略dalvik )。 – rolfl
...但他們都沒有做分裂和親和堆到每個可用的處理器。我很驚訝我無法在Java堆管理中找到任何特定的多處理器。 –