log4j2 無垃圾模式

無垃圾記錄

垃圾收集暫停是延遲峯值的常見原因,並且對於許多系統而言,花費大量精力來控制這些暫停。

許多日誌庫(包括以前版本的Log4j)在穩態日誌記錄期間分配臨時對象,如日誌事件對象,字符串,字符數組,字節數組等。這會對垃圾收集器造成壓力並增加GC暫停發生的頻率。

從版本2.6開始,默認情況下Log4j以“無垃圾”模式運行,其中重用對象和緩衝區,並且儘可能不分配臨時對象。還有一個“低垃圾”模式,它不是完全無垃圾,但不使用ThreadLocal字段。

Log4j 2.6中的無垃圾日誌記錄部分通過重用ThreadLocal字段中的對象來實現,部分通過在將文本轉換爲字節時重用緩衝區來實現。

使用Log4j 2.5:內存分配速率809 MB /秒,141個無效集合。

Log4j 2.6沒有分配臨時對象:0(零)垃圾回收。

有兩個單獨的系統屬性可用於手動控制Log4j用於避免創建臨時對象的機制:

log4j2.enableThreadlocals - 如果“true”(非Web應用程序的默認值)對象存儲在ThreadLocal字段中並重新使用,否則將爲每個日誌事件創建新對象。

log4j2.enableDirectEncoders - 如果將“true”(默認)日誌事件轉換爲文本,則將此文本轉換爲字節而不創建臨時對象。注意: 由於共享緩衝區上的同步,在此模式下多線程應用程序的同步日誌記錄性能可能更差。如果您的應用程序是多線程的並且日誌記錄性能很重要,請考慮使用異步記錄器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章