国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

面試官問我JVM調優,我忍不住了!

不知名網友 / 1824人閱讀

面試官今天要不來聊聊JVM調優相關的吧?

面試官你曾經在生產環境下有過調優JVM的經歷嗎?

候選者:沒有

面試官:...

候選者:嗯...是這樣的,我們一般優化系統的思路是這樣的

候選者:1. 一般來說關系型數據庫是先到瓶頸,首先排查是否為數據庫的問題

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

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

候選者:(這個過程中我們會懷疑是系統的壓力過大或者是系統的硬件能力不足導致系統頻繁出現問題)

候選者:3. 接著,應用代碼層面上排查并優化

候選者:(擴容是不能無止境的,里頭里外都是錢阿。這個過程中我們會審視自己寫的代碼是否存在資源浪費的問題,又或者是在邏輯上可存在優化的地方,比如說通過并行的方式處理某些請求)

候選者:4. 再接著,JVM層面上排查并優化

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

候選者:5. 最后,網絡和操作系統層面排查

候選者:(這個過程查看內存/CPU/網絡/硬盤讀寫指標是否正常等等)

候選者:絕大多數情況下,到第三步就結束了,一般經過「運維團隊」給我們設置的JVM和機器上的參數,已經滿足絕大多數的需求了。

候選者:之前有過其他團隊在「大促」發現接口處理超時的問題,那時候查各種監控懷疑是FULL GC導致的

候選者:第一想法不是說去調節各種JVM參數來進行優化,而是直接加機器

候選者:(用最粗暴的方法,解決問題是最簡單的,擴容YYDS)

面試官:確實

候選者:不過,我是學過JVM相關的調優命令和思路的。

候選者:在我的理解下,調優JVM其實就是在「理解」JVM內存結構以及各種垃圾收集器前提下,結合自己的現有的業務來「調整參數」,使自己的應用能夠正常穩定運行。

候選者:一般調優JVM我們認為會有幾種指標可以參考:『吞吐量』、『停頓時間』和『垃圾回收頻率』

候選者:基于這些指標,我們就有可能需要調整:

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

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

候選者:(按經驗來說:IO密集型的可以稍微把「年輕代」空間加大些,因為大多數對象都是在年輕代就會滅亡。內存計算密集型的可以稍微把「老年代」空間加大些,對象存活時間會更長些)

候選者:2. 垃圾回收器(選擇合適的垃圾回收器,以及各個垃圾回收器的各種調優參數)

候選者:比如(-XX:+UseG1GC:指定 JVM 使用的垃圾回收器為 G1、-XX:MaxGCPauseMillis:設置目標停頓時間、-XX:InitiatingHeapOccupancyPercent:當整個堆內存使用達到一定比例,全局并發標記階段 就會被啟動等等)

候選者:沒錯,這些都是因地制宜,具體問題具體分析(前提是得懂JVM的各種基礎知識,基礎知識都不懂,談何調優)

候選者:在大多數場景下,JVM 已經能夠達到「開箱即用」

面試官:確實

候選者:一般我們是「遇到問題」之后才進行調優的,而遇到問題后需要利用各種的「工具」進行排查

候選者:1. 通過jps命令查看Java進程「基礎」信息(進程號、主類)。這個命令很常用的就是用來看當前服務器有多少Java進程在運行,它們的進程號和加載主類是啥

候選者:2. 通過jstat命令查看Java進程「統計類」相關的信息(類加載、編譯相關信息統計,各個內存區域GC概況和統計)。這個命令很常用于看GC的情況

候選者:3. 通過jinfo命令來查看和調整Java進程的「運行參數」。

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

候選者:5. 通過jstack命令來查看JVM「線程信息」。這個命令用常用語排查死鎖相關的問題

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

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

面試官我想問問,你了解JVM的JIT優化技術嘛?

候選者:JIT優化技術比較出名的有兩種:方法內聯和逃逸分析

候選者:所謂方法內聯就是把「目標方法」的代碼復制到「調用的方法」中,避免發生真實的方法調用

候選者:因為每次方法調用都會生成棧幀(壓棧出棧記錄方法調用位置等等)會帶來一定的性能損耗,所以「方法內聯」的優化可以提高一定的性能

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

候選者:而「逃逸分析」則是判斷一個對象是否被外部方法引用或外部線程訪問的分析技術,如果「沒有被引用」,就可以對其進行優化,比如說:

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

候選者:2. 棧上分配:該對象只會在方法內部被訪問,直接將對象分配在「棧」中(Java默認是將對象分配在「堆」中,是需要通過JVM垃圾回收期進行回收,需要損耗一定的性能,而棧內分配則快很多)

候選者:3. 標量替換/分離對象:當程序真正執行的時候可以不創建這個對象,而直接創建它的成員變量來代替。將對象拆分后,可以分配對象的成員變量在棧或寄存器上,原本的對象就無需分配內存空間了

候選者:不過扯了這么多,不同的JVM版本對JIT的優化都不太相同(:這里也只能算是一個參考

面試官:懂了。

建議閱讀資料:【美團技術博客】Java中9種常見的CMS GC問題分析與解決

歡迎關注我的微信公眾號【Java3y】來聊聊Java面試,對線面試官系列持續更新中!

【對線面試官-移動端】系列 一周兩篇持續更新中!

【對線面試官-電腦端】系列 一周兩篇持續更新中!

原創不易!!求三連!!

更多的文章可往:文章的目錄導航

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125375.html

相關文章

  • Android工程師轉型Java后端開發之路,自己選的路,跪著也要走下去!

    本文是公眾號讀者jianfeng投稿的面試經驗恭喜該同學成功轉型目錄:毅然轉型,沒頭蒼蠅制定目標,系統學習面試經歷毅然轉崗,沒頭蒼蠅首先,介紹一下我的背景。本人坐標廣州,2016年畢業于一個普通二本大學,曾經在某機構培訓過Android。2018年初的時候已經在兩家小公司工作干了兩年的android開發,然后會一些Tomcat、Servlet之類的技術,當時的年薪大概也就15萬這樣子。由于個人發展...

    番茄西紅柿 評論0 收藏0
  • 面試:什么是JavaScript閉包,該如何回答

    摘要:到底什么是閉包這個問題在面試是時候經常都會被問,很多小白一聽就懵逼了,不知道如何回答好。上面這么說閉包是一種特殊的對象。閉包的注意事項通常,函數的作用域及其所有變量都會在函數執行結束后被銷毀。從而使用閉包模塊化代碼,減少全局變量的污染。 閉包,有人說它是一種設計理念,有人說所有的函數都是閉包。到底什么是閉包?這個問題在面試是時候經常都會被問,很多小白一聽就懵逼了,不知道如何回答好。這個...

    BenCHou 評論0 收藏0
  • 面試Redis集群,真的是

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

    shinezejian 評論0 收藏0
  • 大三Java實習總結網易百度小米美團阿里(均拿offer)

    摘要:基礎回答的好百度說實話沒想到百度會給我打面試電話,畢竟是,在我心中地位還是很高的。后來第二天就通知我說直接過了,不用二三面了,就這樣只面了一面稀里糊涂的過了百度。差不多是這些,因為是米粉所以毫不猶豫的接收了小米,沒去百度。 ----------5月5日確認收到阿里offer ----------4月12日昨天阿里HR面完,目前在等結果的階段,無論結果如何都能接收,作為一名雙非學校的本科...

    atinosun 評論0 收藏0

發表評論

0條評論

不知名網友

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<