JVM 發生native heap溢位問題

2021-06-17 14:21:11 字數 379 閱讀 7513

1、  最近專案中出現jvm中native heap無法分配的問題,但是根據jvm產生的dump檔案來看,heap是夠用的,根據自己學些的jvm的知識和在網上查詢的一些資料,分析是jni這塊出現了問題。

2、 往jni方面分析,然後找到jvm崩潰的那個時間點的日誌,在那個時間點呼叫了很多的native方法,而且頻率非常的高;作業系統本身的物理記憶體占用到了98%,在任務管理器中看到了很多的powershell程序和cmd.exe程序。

3、 檢視了呼叫的介面函式,使用了buffer快取機制,這樣native heap在那個時刻,在高頻率的函式呼叫情況下,還沒來得及釋放,快取空間會不夠用,所以會導致申請記憶體不夠。

4、在用native函式或buffer快取**的時候,在乙個時刻不要被呼叫太過頻繁。

JVM虛擬機器 YGC和FGC發生的具體場景

1.ygc和fgc是什麼 ygc 對新生代堆進行gc。頻率比較高,因為大部分物件的存活壽命較短,在新生代裡被 效能耗費較小。fgc 全堆範圍的gc。預設堆空間使用到達80 可調整 的時候會觸發fgc。以我們生產環境為例,一般比較少會觸發fgc,有時10天或一周左右會有一次。2.什麼時候執行ygc和f...

new乙個物件會發生的事(JVM層面)

類的載入過程,分為載入,連線和初始化,而連線又分為三個過程,驗證準備和解析 其中載入部分,簡而言之,通過類載入器,將.j a檔案載入為.class檔案存入jvm記憶體 連線部分主要是對.class檔案在執行器前做一些修飾性的工作 驗證部分 保證.class檔案的內容符合虛擬機器要求的規範,不會存在安...

JVM物件逃逸分析 JVM記憶體

jvm的執行模式有三種 解釋模式 interpreted mode 只使用直譯器 xint 強制jvm使用解釋模式 執行一行jvm位元組碼就編譯一行為機器碼 編譯模式 compiled mode 只使用編譯器 xcomp jvm使用編譯模式 先將所有jvm位元組碼一次編譯為機器碼,然 後一次性執行所...