一次常規(guī)拓展學(xué)習(xí)

前言

Java程序員,剛?cè)胄械臅r候一般都抱著一本《Java核心技術(shù)》爆啃,對知識有苛求的,會選擇把卷二讀一遍。兩本4、5百頁的書,看完之后,自我覺得知識已經(jīng)滿了。從此開始投身在不停的寫service,dao,controller的階段。

過了兩年,等換工作的時候,除了能把公司業(yè)務(wù)聊的一清二楚,發(fā)現(xiàn)真沒有什么亮點,虛擬機,多線程多半都是面試前,突擊的惡補一遍,勉勉強強能夠應(yīng)付各類面試提問。

但是,如果你不甘心只做一名碼農(nóng),整日無休止的粘貼復(fù)制。建議你看完這篇文章。

起因

在一次測試過程中,發(fā)現(xiàn)mysql報MySQL: ERROR 1040: Too many connections。很明顯,連接數(shù)已達到最大值,手動增加了mysql的連接數(shù),并重啟完成服務(wù)重啟。

但修改連接池數(shù)量,并不能從根本上解決問題。從mysql的連接列表里,發(fā)現(xiàn)隔一段時間會有新的應(yīng)用連接進來,并很快就進入休眠狀態(tài),活躍的連接很少。但是因為連接的斷開過程是很慢的,所以當(dāng)大量新建連接占滿連接數(shù)的時候,mysql就拒絕了其它新的連接請求。

過程

經(jīng)過分析,發(fā)現(xiàn)一個同學(xué)在寫的springboot應(yīng)用里,并沒有設(shè)置應(yīng)用端連接池,開始進行連接池的添加,springboot默認內(nèi)置了hikariCP,當(dāng)然,你可以選擇druid,c3p0。

添加完連接池,問題就已經(jīng)解決掉了。于是開始對比,為什么springboot把hikariCP作為默認連接池。開始比對hikariCP和其它連接池的對比。

數(shù)據(jù)庫連接池性能比對(hikari druid c3p0 dbcp jdbc)

發(fā)現(xiàn)此作者,不但有連接池,還有一個json包,hikariJSON,比jackson快數(shù)倍。源碼數(shù)量很小,于是,直接把源碼拉下來看了下。
https://github.com/brettwooldridge/HikariJSON

代碼寫的很規(guī)整,包含測試用例,跟著測試用例的示例一步步看下去,發(fā)現(xiàn)FieldBasedJsonMapper類中引用到了Unsafe,提供了java以類c指針的方式分配內(nèi)存,增加了java對堆外內(nèi)存的控制。于是,把unsafe看了一遍。
Java魔法類:Unsafe應(yīng)用解析

既然是堆外內(nèi)存操作,很自然的要對比堆內(nèi)的區(qū)別。再細分,就是堆內(nèi)內(nèi)存分配,類加載,動態(tài)字節(jié)碼,熱修復(fù),垃圾回收等等。

方法

Java程序員隊伍的初中高,取決于對該語言的理解,熟悉基礎(chǔ)語法,運行環(huán)境;懂一些基本開發(fā)模式,會一些常用框架;熟悉框架設(shè)計,懂得各模塊實現(xiàn)原理;熟悉虛擬機,熟悉解釋層與物理層之間的交互;理解編譯層和執(zhí)行層作用在不同硬件上的差異(比如什么狀態(tài)下cpu使用高,哪些內(nèi)存用的多,又比如哪些會造成內(nèi)存泄露,逃逸,溢出);最后就是,你已經(jīng)不滿足JVM提供的各類便利性,你認為它的各種優(yōu)化過于復(fù)雜,執(zhí)行周期漫長。你要自己來搞。

大部分人,停留在初、中。寫了一輩子代碼,做了很多業(yè)務(wù)方向,但都未曾嘗試過優(yōu)化改變JVM底層設(shè)計。很顯然,在多數(shù)場景下,無需做額外工作,足夠讓業(yè)務(wù)跑起來。但是,一旦出了問題,就完全束手無策。

Java相關(guān)衍生太多,類別分類也太多,窮盡一生,也無法面面俱到。除了對主要模塊的深入理解,更多的是從一個小事情,不斷延伸發(fā)散,順著一條主線深挖,一定會碰到意想不到的興奮點。而這些,就是成長體現(xiàn)。

隨著問題線的數(shù)量越來越多,逐漸會對整個體系有一個全面理解,這時候,才能真正進階到高級階段。

后記

從高級上升到架構(gòu),不但要有過硬的技術(shù)能力,還需要對業(yè)務(wù)場景、解決方案有更為通透的理解。

貼近業(yè)務(wù),提升通過技術(shù)手段解決各類問題的能力。推動技術(shù)變革的,永遠是不斷變化的業(yè)務(wù)發(fā)展。

希望這一次常規(guī)的小記,對剛?cè)胄械耐瑢W(xué)們有些幫助。

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

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

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