咨詢郵箱?咨詢郵箱:service@yitianxinda.com 咨詢熱線?咨詢熱線:18101296137 微博 微信
北京軟件開發(fā)公司log4j 2.6免垃圾收集_北京軟件開發(fā)公司
發(fā)表日期:2016-06-12 09:26:39 ?? 文章編輯:yitianxinda ?? 瀏覽次數(shù):

  北京軟件開發(fā)公司log4j 2.6免垃圾收集,Java語言中流行的日志庫Log4j的較新版本Log4j 2.6,將引入一系列選項以運行在免垃圾回收模式。該發(fā)布繼續(xù)跟隨前幾個發(fā)布版,嘗試提升日志庫的性能,并且已經(jīng)得到業(yè)界的積極響應(yīng)。據(jù)性能改進倡議的引導者Remko Popm透露,下一步將會增加log4j可以運行在免垃圾回收模式的場景數(shù)量。

  2014年7月,log4j 2.0在日志框架領(lǐng)域革命性地引入了異步記錄器,相比于同步記錄器將吞吐率提升了6至68倍。這些結(jié)果可能令人影響深刻,但日志框架的性能損耗仍然占據(jù)了部分高吞吐率、低延時應(yīng)用響應(yīng)時間的很大一部分,這常常導致開發(fā)者在部署時排除日志框架。對于高性能應(yīng)用程序進行微調(diào)以避免垃圾回收導致的暫停能夠達到非常好的效果,log4j團隊斷定這些性能提升能夠帶來更多的用戶。通過性能和Java專家Kirk Pepperdine的評論來判斷,該假設(shè)是成立的:

  Java中的日志框架形勢不容樂觀。到今天為止,我很少碰到客戶反饋他們的系統(tǒng)沒有因為日志框架導致的負面影響。我與到的一個極端例子是,一個客戶面臨4.5秒的時限,但是日志記錄占用了其中的4.2秒(很大一部分壓力來自于異步追加器)。我將對次版本發(fā)布非常感興趣。

  防止垃圾回收是通過避免創(chuàng)建臨時對象來實現(xiàn)的,這意味著需要盡可能的復(fù)用已經(jīng)存在的對象。然而在較初發(fā)布的時候,整個庫沒有能夠做到免垃圾回收,因此開發(fā)者如果希望實現(xiàn)該功能,需要注意追加器(appenders)、日志記錄器(loggers)、格式化布局(formatting layouts)和API使用時的限制。

  應(yīng)用程序類型

  部分被復(fù)用的對象保存在ThreadLocal區(qū)域中。這樣的設(shè)計對獨立的應(yīng)用程序來說沒有問題,但是對于web應(yīng)用可能會引起內(nèi)存泄漏。應(yīng)用服務(wù)器可能會將ThreadLocal保存在線程池中,這意味著即使應(yīng)用被卸載,用于日志記錄的對象仍然會保持引用。因此,通過ThreadLOcal來復(fù)用對象的功能在web應(yīng)用程序中默認是關(guān)閉的,既log4j無法完全運行在免垃圾回收模式。

  日志記錄器

  log4j防止觸發(fā)垃圾回收的另一個方式是在將文本轉(zhuǎn)換為字符數(shù)組的時候復(fù)用緩沖區(qū)。所有類型的應(yīng)用程序都可因此受益,且該功能默認是開啟的。然而使用同步日志記錄器的多線程應(yīng)用程序可能會有性能影響,因為不同的線程需要競爭共享的緩沖區(qū)。如果遇到這種情況,應(yīng)該優(yōu)先使用異步日志記錄器,或者禁用共享緩沖區(qū)。

  追加器

  只有部分追加器已經(jīng)修改以避免創(chuàng)建臨時對象:Console(控制臺)、File(文件)、RandomAccessFile(隨機訪問文件)、上述追加器的回卷追加器、MemoryMappedFile(內(nèi)存映射文件)。任何其他追加器都會產(chǎn)生垃圾,并且需要被回收。然而需要注意的是,這些追加器本身可以免垃圾回收,仍然會有其他I/O相關(guān)的因素會影響它們的性能。

  格式化布局

  格式化布局可能是開發(fā)者在試圖配置達到免垃圾回收時較棘手的部分,因為他們不僅需要關(guān)注所需使用的布局,還需要關(guān)注布局中的選項。GelfLayout(Graylog Extended Log Format)布局只有在壓縮選項禁用時才支持免垃圾回收,而PatternLayout只支持限定的轉(zhuǎn)換模式,任何其他轉(zhuǎn)換模式都會創(chuàng)建臨時對象。

  API使用

  API本身也已經(jīng)為避免創(chuàng)建臨時對象而修改。除了之前支持簡單可變長度參數(shù)(這樣會創(chuàng)建一個臨時數(shù)據(jù))的方法之外,log4j新增了所有方法的重載版本,較多支持10個參數(shù)。調(diào)用方法超過10個參數(shù)仍然會使用可變長度參數(shù),這將會創(chuàng)建臨時數(shù)組。

  這個限制對于通過SLF4J使用log4j的場景影響較大,因為這個門面庫只提供了較多兩個參數(shù)的非變長參數(shù)。用戶如果希望使用超過兩個參數(shù),并運行在免垃圾回收模式,就需要拋棄SLF4J。

  對代碼的影響

  雖然已經(jīng)做了向下兼容,以避免開發(fā)者更新代碼,有一類臨時對象的創(chuàng)建和log4j框架本身無關(guān):對基本數(shù)據(jù)類型的自動裝箱。為了確保JVM不將基本數(shù)據(jù)類型裝換成對應(yīng)的對象,開發(fā)者在給log4j傳遞基本數(shù)據(jù)類型時,可以使用靜態(tài)方法Unboxer.box()。該方法可以允許log4j直接處理基本數(shù)據(jù)類型而無需創(chuàng)建不必要的對象。

  盡管有一系列的限制條件,這些改變已經(jīng)有潛力在嚴格性能需求的場景下顯著提升日志記錄的體驗。那些因為當前限制無法使用免垃圾回收特性的開發(fā)者,可以繼續(xù)關(guān)注變更列表,在未來的發(fā)布版本中可能會提供進一步的改進。

相關(guān)文章推薦
從頭開始構(gòu)建網(wǎng)站并托管和維護或改造舊網(wǎng)站需要聘請一支擁有技能和專業(yè)知識的團隊。如果您不想進一步擴大團隊,不想經(jīng)歷招聘大手筆,或者想降低離岸成本,北京軟件開發(fā)外包...
物聯(lián)網(wǎng) ( IoT ) 概念首次出現(xiàn)時,曾有大膽預(yù)測稱,到 2020 年,物聯(lián)網(wǎng)連接設(shè)備數(shù)量將達到 500 億甚至數(shù)萬億。這些極高的估值引發(fā)了炒作,但最終被證明...
下一代工業(yè)進步被稱為工業(yè)4.0,旨在將傳統(tǒng)行業(yè)(如自動化)互聯(lián)互通并實現(xiàn)計算機化。工業(yè)4.0的目標是使工廠變得更加智能,提高適應(yīng)性和資源效率,以及改善工廠之間供...
企業(yè)需要強大且可靠的在線形象才能取得成功。Magento 已成為領(lǐng)先的電子商務(wù)平臺,為各種規(guī)模的企業(yè)提供強大的功能和定制選項。對于希望通過基于 Magento ...
近幾年最大的發(fā)展趨勢之一是移動應(yīng)用程序加密。正如我們最近所寫,主要的消息應(yīng)用程序正在朝著為用戶提供端到端加密默認設(shè)置的方向發(fā)展——這是有充分理由的。隨著公眾開始...
通過與北京軟件公司?合作,企業(yè)可以獲得所需的熟練開發(fā)人員,以加速創(chuàng)新和發(fā)展。北京軟件公司 可以通過提供成熟的開發(fā)人員和定制解決方案來幫助企業(yè)彌補開發(fā)人員短缺的差距并實現(xiàn)業(yè)務(wù)增長。...
很多人認為,創(chuàng)建一個新的軟件開發(fā)解決方案,你需要的是找到一些程序員,并告訴他們該怎么做。這個觀點是在小型和中小型企業(yè)通常不涉及軟件項目中尤為常見。...
北京軟件開發(fā)公司對軟件錯誤檢測的研究促使軟件開發(fā)工程師開發(fā)了一種方法——它就像兩個說自己語言的朋友一樣——來加強對電子郵件和社交媒體消息等數(shù)字內(nèi)容的保護。...
物聯(lián)網(wǎng)軟件開發(fā)(IoT)連接日常對象中發(fā)現(xiàn)的智能技術(shù),以實現(xiàn)數(shù)據(jù)流。物聯(lián)網(wǎng)的機會擴展到許多垂直領(lǐng)域,包括工業(yè)市場。...
數(shù)據(jù)是業(yè)務(wù)許多方面成功的關(guān)鍵。先進的商務(wù)智能(BI)工具使組織可以實時收集,分析數(shù)據(jù)并對數(shù)據(jù)做出反應(yīng)。從營銷到運營,這都是真正的高效和知識淵博的組織。BI解決方案代表了...
可以通過物聯(lián)網(wǎng)基礎(chǔ)設(shè)施自動控制加熱和冷卻設(shè)備、洗衣機或汽車充電站等智能設(shè)備,以節(jié)省能源或僅在例如以較低價格提供電力的時間投入運行。...
工業(yè)控制系統(tǒng) (ICS) 解決方案需要新的架構(gòu),并且需要更適應(yīng)不斷變化的環(huán)境的理念。重點介紹了六種方法: 學習目標 工業(yè) 4.0 時代的工業(yè)控制解決方案需要新的架構(gòu)和理念。 由于工業(yè)...
?