成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

面試官問(wèn)我JVM調(diào)優(yōu),我忍不住了!

不知名網(wǎng)友 / 1832人閱讀

面試官今天要不來(lái)聊聊JVM調(diào)優(yōu)相關(guān)的吧?

面試官你曾經(jīng)在生產(chǎn)環(huán)境下有過(guò)調(diào)優(yōu)JVM的經(jīng)歷嗎?

候選者:沒(méi)有

面試官:...

候選者:嗯...是這樣的,我們一般優(yōu)化系統(tǒng)的思路是這樣的

候選者:1. 一般來(lái)說(shuō)關(guān)系型數(shù)據(jù)庫(kù)是先到瓶頸,首先排查是否為數(shù)據(jù)庫(kù)的問(wèn)題

候選者:(這個(gè)過(guò)程中就需要評(píng)估自己建的索引是否合理、是否需要引入分布式緩存、是否需要分庫(kù)分表等等)

候選者:2. 然后,我們會(huì)考慮是否需要擴(kuò)容(橫向和縱向都會(huì)考慮)

候選者:(這個(gè)過(guò)程中我們會(huì)懷疑是系統(tǒng)的壓力過(guò)大或者是系統(tǒng)的硬件能力不足導(dǎo)致系統(tǒng)頻繁出現(xiàn)問(wèn)題)

候選者:3. 接著,應(yīng)用代碼層面上排查并優(yōu)化

候選者:(擴(kuò)容是不能無(wú)止境的,里頭里外都是錢(qián)阿。這個(gè)過(guò)程中我們會(huì)審視自己寫(xiě)的代碼是否存在資源浪費(fèi)的問(wèn)題,又或者是在邏輯上可存在優(yōu)化的地方,比如說(shuō)通過(guò)并行的方式處理某些請(qǐng)求)

候選者:4. 再接著,JVM層面上排查并優(yōu)化

候選者:(審視完代碼之后,這個(gè)過(guò)程我們觀察JVM是否存在多次GC問(wèn)題等等)

候選者:5. 最后,網(wǎng)絡(luò)和操作系統(tǒng)層面排查

候選者:(這個(gè)過(guò)程查看內(nèi)存/CPU/網(wǎng)絡(luò)/硬盤(pán)讀寫(xiě)指標(biāo)是否正常等等)

候選者:絕大多數(shù)情況下,到第三步就結(jié)束了,一般經(jīng)過(guò)「運(yùn)維團(tuán)隊(duì)」給我們?cè)O(shè)置的JVM和機(jī)器上的參數(shù),已經(jīng)滿足絕大多數(shù)的需求了。

候選者:之前有過(guò)其他團(tuán)隊(duì)在「大促」發(fā)現(xiàn)接口處理超時(shí)的問(wèn)題,那時(shí)候查各種監(jiān)控懷疑是FULL GC導(dǎo)致的

候選者:第一想法不是說(shuō)去調(diào)節(jié)各種JVM參數(shù)來(lái)進(jìn)行優(yōu)化,而是直接加機(jī)器

候選者:(用最粗暴的方法,解決問(wèn)題是最簡(jiǎn)單的,擴(kuò)容YYDS)

面試官:確實(shí)

候選者:不過(guò),我是學(xué)過(guò)JVM相關(guān)的調(diào)優(yōu)命令和思路的。

候選者:在我的理解下,調(diào)優(yōu)JVM其實(shí)就是在「理解」JVM內(nèi)存結(jié)構(gòu)以及各種垃圾收集器前提下,結(jié)合自己的現(xiàn)有的業(yè)務(wù)來(lái)「調(diào)整參數(shù)」,使自己的應(yīng)用能夠正常穩(wěn)定運(yùn)行。

候選者:一般調(diào)優(yōu)JVM我們認(rèn)為會(huì)有幾種指標(biāo)可以參考:『吞吐量』、『停頓時(shí)間』和『垃圾回收頻率』

候選者:基于這些指標(biāo),我們就有可能需要調(diào)整:

候選者:1. 內(nèi)存區(qū)域大小以及相關(guān)策略(比如整塊堆內(nèi)存占多少、新生代占多少、老年代占多少、Survivor占多少、晉升老年代的條件等等)

候選者:比如(-Xmx:設(shè)置堆的最大值、-Xms:設(shè)置堆的初始值、-Xmn:表示年輕代的大小、-XX:SurvivorRatio:伊甸區(qū)和幸存區(qū)的比例等等)

候選者:(按經(jīng)驗(yàn)來(lái)說(shuō):IO密集型的可以稍微把「年輕代」空間加大些,因?yàn)榇蠖鄶?shù)對(duì)象都是在年輕代就會(huì)滅亡。內(nèi)存計(jì)算密集型的可以稍微把「老年代」空間加大些,對(duì)象存活時(shí)間會(huì)更長(zhǎng)些)

候選者:2. 垃圾回收器(選擇合適的垃圾回收器,以及各個(gè)垃圾回收器的各種調(diào)優(yōu)參數(shù))

候選者:比如(-XX:+UseG1GC:指定 JVM 使用的垃圾回收器為 G1、-XX:MaxGCPauseMillis:設(shè)置目標(biāo)停頓時(shí)間、-XX:InitiatingHeapOccupancyPercent:當(dāng)整個(gè)堆內(nèi)存使用達(dá)到一定比例,全局并發(fā)標(biāo)記階段 就會(huì)被啟動(dòng)等等)

候選者:沒(méi)錯(cuò),這些都是因地制宜,具體問(wèn)題具體分析(前提是得懂JVM的各種基礎(chǔ)知識(shí),基礎(chǔ)知識(shí)都不懂,談何調(diào)優(yōu))

候選者:在大多數(shù)場(chǎng)景下,JVM 已經(jīng)能夠達(dá)到「開(kāi)箱即用」

面試官:確實(shí)

候選者:一般我們是「遇到問(wèn)題」之后才進(jìn)行調(diào)優(yōu)的,而遇到問(wèn)題后需要利用各種的「工具」進(jìn)行排查

候選者:1. 通過(guò)jps命令查看Java進(jìn)程「基礎(chǔ)」信息(進(jìn)程號(hào)、主類(lèi))。這個(gè)命令很常用的就是用來(lái)看當(dāng)前服務(wù)器有多少Java進(jìn)程在運(yùn)行,它們的進(jìn)程號(hào)和加載主類(lèi)是啥

候選者:2. 通過(guò)jstat命令查看Java進(jìn)程「統(tǒng)計(jì)類(lèi)」相關(guān)的信息(類(lèi)加載、編譯相關(guān)信息統(tǒng)計(jì),各個(gè)內(nèi)存區(qū)域GC概況和統(tǒng)計(jì))。這個(gè)命令很常用于看GC的情況

候選者:3. 通過(guò)jinfo命令來(lái)查看和調(diào)整Java進(jìn)程的「運(yùn)行參數(shù)」。

候選者:4. 通過(guò)jmap命令來(lái)查看Java進(jìn)程的「內(nèi)存信息」。這個(gè)命令很常用于把JVM內(nèi)存信息dump到文件,然后再用MAT( Memory Analyzer tool 內(nèi)存解析工具)把文件進(jìn)行分析

候選者:5. 通過(guò)jstack命令來(lái)查看JVM「線程信息」。這個(gè)命令用常用語(yǔ)排查死鎖相關(guān)的問(wèn)題

候選者:6. 還有近期比較熱門(mén)的Arthas(阿里開(kāi)源的診斷工具),涵蓋了上面很多命令的功能且自帶圖形化界面。這也是我這邊常用的排查和分析工具

面試官:嗯...好吧。之前聊JVM的時(shí)候,你也提到過(guò)在「解釋」階段,會(huì)有兩種方式把字節(jié)碼信息解釋成機(jī)器指令碼,一個(gè)是字節(jié)碼解釋器、一個(gè)是即時(shí)編譯器(JIT)

面試官我想問(wèn)問(wèn),你了解JVM的JIT優(yōu)化技術(shù)嘛?

候選者:JIT優(yōu)化技術(shù)比較出名的有兩種:方法內(nèi)聯(lián)和逃逸分析

候選者:所謂方法內(nèi)聯(lián)就是把「目標(biāo)方法」的代碼復(fù)制到「調(diào)用的方法」中,避免發(fā)生真實(shí)的方法調(diào)用

候選者:因?yàn)槊看畏椒ㄕ{(diào)用都會(huì)生成棧幀(壓棧出棧記錄方法調(diào)用位置等等)會(huì)帶來(lái)一定的性能損耗,所以「方法內(nèi)聯(lián)」的優(yōu)化可以提高一定的性能

候選者:在JVM中也有相關(guān)的參數(shù)給予我們指定(-XX:MaxFreqInlineSize、-XX:MaxInlineSize)

候選者:而「逃逸分析」則是判斷一個(gè)對(duì)象是否被外部方法引用或外部線程訪問(wèn)的分析技術(shù),如果「沒(méi)有被引用」,就可以對(duì)其進(jìn)行優(yōu)化,比如說(shuō):

候選者:1. 鎖消除(同步忽略):該對(duì)象只在方法內(nèi)部被訪問(wèn),不會(huì)被別的地方引用,那么就一定是線程安全的,可以把鎖相關(guān)的代碼給忽略掉

候選者:2. 棧上分配:該對(duì)象只會(huì)在方法內(nèi)部被訪問(wèn),直接將對(duì)象分配在「?!怪校↗ava默認(rèn)是將對(duì)象分配在「堆」中,是需要通過(guò)JVM垃圾回收期進(jìn)行回收,需要損耗一定的性能,而棧內(nèi)分配則快很多)

候選者:3. 標(biāo)量替換/分離對(duì)象:當(dāng)程序真正執(zhí)行的時(shí)候可以不創(chuàng)建這個(gè)對(duì)象,而直接創(chuàng)建它的成員變量來(lái)代替。將對(duì)象拆分后,可以分配對(duì)象的成員變量在?;蚣拇嫫魃希镜膶?duì)象就無(wú)需分配內(nèi)存空間了

候選者:不過(guò)扯了這么多,不同的JVM版本對(duì)JIT的優(yōu)化都不太相同(:這里也只能算是一個(gè)參考

面試官:懂了。

建議閱讀資料:【美團(tuán)技術(shù)博客】Java中9種常見(jiàn)的CMS GC問(wèn)題分析與解決

歡迎關(guān)注我的微信公眾號(hào)【Java3y】來(lái)聊聊Java面試,對(duì)線面試官系列持續(xù)更新中!

【對(duì)線面試官-移動(dòng)端】系列 一周兩篇持續(xù)更新中!

【對(duì)線面試官-電腦端】系列 一周兩篇持續(xù)更新中!

原創(chuàng)不易??!求三連??!

更多的文章可往:文章的目錄導(dǎo)航

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/125375.html

相關(guān)文章

  • Android工程師轉(zhuǎn)型Java后端開(kāi)發(fā)之路,自己選的路,跪著也要走下去!

    本文是公眾號(hào)讀者jianfeng投稿的面試經(jīng)驗(yàn)恭喜該同學(xué)成功轉(zhuǎn)型目錄:毅然轉(zhuǎn)型,沒(méi)頭蒼蠅制定目標(biāo),系統(tǒng)學(xué)習(xí)面試經(jīng)歷毅然轉(zhuǎn)崗,沒(méi)頭蒼蠅首先,介紹一下我的背景。本人坐標(biāo)廣州,2016年畢業(yè)于一個(gè)普通二本大學(xué),曾經(jīng)在某機(jī)構(gòu)培訓(xùn)過(guò)Android。2018年初的時(shí)候已經(jīng)在兩家小公司工作干了兩年的android開(kāi)發(fā),然后會(huì)一些Tomcat、Servlet之類(lèi)的技術(shù),當(dāng)時(shí)的年薪大概也就15萬(wàn)這樣子。由于個(gè)人發(fā)展...

    番茄西紅柿 評(píng)論0 收藏0
  • 面試問(wèn):什么是JavaScript閉包,該如何回答

    摘要:到底什么是閉包這個(gè)問(wèn)題在面試是時(shí)候經(jīng)常都會(huì)被問(wèn),很多小白一聽(tīng)就懵逼了,不知道如何回答好。上面這么說(shuō)閉包是一種特殊的對(duì)象。閉包的注意事項(xiàng)通常,函數(shù)的作用域及其所有變量都會(huì)在函數(shù)執(zhí)行結(jié)束后被銷(xiāo)毀。從而使用閉包模塊化代碼,減少全局變量的污染。 閉包,有人說(shuō)它是一種設(shè)計(jì)理念,有人說(shuō)所有的函數(shù)都是閉包。到底什么是閉包?這個(gè)問(wèn)題在面試是時(shí)候經(jīng)常都會(huì)被問(wèn),很多小白一聽(tīng)就懵逼了,不知道如何回答好。這個(gè)...

    BenCHou 評(píng)論0 收藏0
  • 面試問(wèn)Redis集群,真的是

    摘要:面試官聊下的分片集群,先聊好咯面試官是才有的官方集群方案,這塊你了解多少候選者嗯,要不還是從基礎(chǔ)講起唄候選者在前面聊的時(shí)候,提到的都是單實(shí)例存儲(chǔ)所有的數(shù)據(jù)。面試官:聊下Redis的分片集群,先聊 Redis Cluster好咯? 面試官:Redis Cluser是Redis 3.x才有的官方集群方案,這塊你了解多少? 候選者:嗯,要不還是從基礎(chǔ)講起唄? 候選者:在前面聊Re...

    shinezejian 評(píng)論0 收藏0
  • 大三Java實(shí)習(xí)總結(jié)網(wǎng)易百度小米美團(tuán)阿里(均拿offer)

    摘要:基礎(chǔ)回答的好百度說(shuō)實(shí)話沒(méi)想到百度會(huì)給我打面試電話,畢竟是,在我心中地位還是很高的。后來(lái)第二天就通知我說(shuō)直接過(guò)了,不用二三面了,就這樣只面了一面稀里糊涂的過(guò)了百度。差不多是這些,因?yàn)槭敲追鬯院敛华q豫的接收了小米,沒(méi)去百度。 ----------5月5日確認(rèn)收到阿里offer ----------4月12日昨天阿里HR面完,目前在等結(jié)果的階段,無(wú)論結(jié)果如何都能接收,作為一名雙非學(xué)校的本科...

    atinosun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<