因爲GC操做會暫停全部的應用程序線程,JVM爲了儘可能縮短停頓時間就必須儘量地利用更多的CPU資源。這意味着,默認狀況下,JVM會在機器的每一個CPU上運行一個線程,最多同時運行8個。算法
一旦達到這個上限,JVM會調整算法,每超出5/8個CPU啓動一個新的線程。因此總的線程數就是(這裏的N表明CPU的數目):
ParallelGCThreads = 8 + ((N - 8) * 5/8)線程
有時候使用這個算法估算出來的線程數目會偏大。若是應用程序使用一個較小的堆(譬如大小爲1 GB)運行在一個八顆CPU的機器上,使用4個線程或者6個線程處理這個堆可能會更高效。在一個128顆CPU的機器上,啓動83個垃圾收集線程可能也太多了,除非系統使用的堆已經達到了最大上限。資源