記一次Class.forname引發(fā)的性能問題

某日,在測(cè)試環(huán)境觀察中發(fā)現(xiàn),即使是一個(gè)很簡(jiǎn)單的sql語(yǔ)句執(zhí)行都會(huì)導(dǎo)致執(zhí)行時(shí)間達(dá)到500ms以上,而sql在數(shù)據(jù)庫(kù)執(zhí)行只需要20ms左右。

為了解決這個(gè)問題,我首先使用jstack 將日志所有堆棧打印出現(xiàn)觀察,在日志中觀察發(fā)現(xiàn),大量的線程阻塞在Class.forName()

image.png

從堆棧可以看到,是阻塞在了Class.forName,再根據(jù)最深的堆棧可以觀察到,在硬盤檢索文件。通過查看對(duì)應(yīng)的源碼文件發(fā)現(xiàn),這是一個(gè)公司級(jí)組件,通過try catch Class.forName的方式兼容某個(gè)框架的不同版本。而我當(dāng)前使用的版本Class.forName是找不到的,導(dǎo)致每次Class.forName都會(huì)在硬盤檢索一次文件,導(dǎo)致每次sql執(zhí)行檢索一次硬盤文件浪費(fèi)了500ms。

最終通過調(diào)整機(jī)制,僅在啟動(dòng)的時(shí)候Class.forname判斷一個(gè)對(duì)應(yīng)框架的版本號(hào)解決。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引言 經(jīng)過前述九章的JVM知識(shí)學(xué)習(xí)后,咱們對(duì)于JVM的整體知識(shí)體系已經(jīng)有了全面的認(rèn)知。但前面的章節(jié)中,更多的是停...
    竹子愛熊貓閱讀 1,768評(píng)論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,840評(píng)論 18 399
  • 1.集合有哪些?數(shù)據(jù)結(jié)構(gòu)?初始長(zhǎng)度?擴(kuò)容機(jī)制?哪些是線程安全的?hashmap的底層原理? 集合類型主要有3種:s...
    爛泥l(xiāng)anni閱讀 1,691評(píng)論 0 1
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,034評(píng)論 0 11
  • 業(yè)務(wù)場(chǎng)景 支付平臺(tái)每日早晨會(huì)收到賬務(wù)系統(tǒng)發(fā)送的批量扣款指令,這些扣款指令需要通過支付路由系統(tǒng)獲取到最優(yōu)的扣款支付渠...
    小菜Yang閱讀 8,603評(píng)論 3 5

友情鏈接更多精彩內(nèi)容