JVM如何選擇ParallelGCThreads

2021-08-10 08:23:37 字數 1259 閱讀 9446



parallelgcthreads,表示jvm在進行並行gc的時候,用於gc的執行緒數,-xx:parallelgcthreads=43,表示配置gc執行緒數為43。

jvm中,關於parallelgcthreads的計算**如下:

unsignedintvm_version::calc_parallel_worker_threads()  else if (is_niagara_plus())  else 

return result; }

unsignedintabstract_vm_version::parallel_worker_threads()  else 

_parallel_worker_threads_initialized = true; }

return _parallel_worker_threads; }

unsignedintabstract_vm_version::calc_parallel_worker_threads() 

unsignedintabstract_vm_version::nof_parallel_worker_threads(

unsigned int num,

unsigned int den,

unsigned int switch_pt)  else  }

上面列出了與parallelgcthreads計算相關的幾個核心介面,其中,最主要關注nof_parallel_worker_threads介面,該介面中給出了計算parallelgcthreads值的具體演算法,具體如下:

①如果使用者顯示指定了parallelgcthreads,則使用使用者指定的值。

②否則,需要根據實際的cpu所能夠支援的執行緒數來計算parallelgcthreads的值,計算方法見步驟③和步驟④。

③如果物理cpu所能夠支援執行緒數小於8,則parallelgcthreads的值為cpu所支援的執行緒數。這裡的閥值為8,是因為jvm中呼叫nof_parallel_worker_threads介面所傳入的switch_pt的值均為8。

④如果物理cpu所能夠支援執行緒數大於8,則parallelgcthreads的值為8加上乙個調整值,調整值的計算方式為:物理cpu所支援的執行緒數減去8所得值的5/8或者5/16,jvm會根據實際的情況來選擇具體是乘以5/8還是5/16。

比如,在64執行緒的x86 cpu上,如果使用者未指定parallelgcthreads的值,則預設的計算方式為:parallelgcthreads = 8 + (64 - 8) * (5/8) = 8 + 35 = 43。

如何獲取JVM的dump檔案

如何獲取jvm的dump檔案 獲取jvm的dump檔案的兩種方式 jvm啟動時增加兩個引數 發現程式異常前通過執行指令,直接生成當前jvm的dmp檔案,6214是指jvm的程序號 jmap dump format b,file servicedump.dat 6214 由於第一種方式是一種事後方式,...

JVM 是如何處理異常

jvm 是如何處理異常的?參 在乙個方法中如果發生異常,這個方法會建立乙個異常物件,並轉交給 jvm,該異常物件包含異常名稱,異常描述以及異常發生時應用程式的狀態。建立異常物件並轉交給 jvm 的過程稱為丟擲異常。可能有一系列的方法呼叫,最終才進入丟擲異常的方法,這一系列方法呼叫的有序列表叫做呼叫棧...

如何排查JVM記憶體問題並定位

今天收到測試小姐姐提的bug,在進行壓測的時,記憶體和cpu都飆高,要我分析一下。使用jdk自帶的 jvisualvm.exe 功能 在jdk的bin目錄下 如果是記憶體洩漏,堆記憶體會一直往上飆,然後會出現瘋狂gc的情況。我這裡沒有出現瘋狂gc的情況,而是有規律的gc,但每次gc的時候cpu都會飆...