好程式設計師Java分享JVM從哪方面入手學習

好程式設計師IT發表於2019-09-20

   好程式設計師Java分享 JVM從哪方面入手 學習, 無論什麼級別的Java從業者,JVM都是進階時必須邁過的坎。不管是工作還是面試中,JVM都是必考題。如果不懂JVM的話,薪酬會非常吃虧。掌握了JVM機制,就等於學會了深層次解決問題的方法。對於Java開發者而言,只有熟悉底層虛擬機器的執行機制,才能透過JVM日誌深入到位元組碼的層次去分析排查問題,發現隱性的系統缺陷,進而提升系統效能。

   一些技術人員開發工具用得很熟練,觸及JVM問題時卻是模稜兩可,甚至連記憶體模型和記憶體區域,HotSpot和JVM規範,都混淆不清。工作很長時間,在生產時還在用預設引數來直接啟動,以致系統執行時出現效能、穩定性等問題時束手無措,不知該如何追蹤排查。久而久之,這對自己的職業成長是極為不利的.

   學習JVM首先需要了解Java的執行時資料區域,Java的資料區域包括程式記錄器,Java

   虛擬機器棧,本地方法棧,堆,方法區,執行時常量池和直接記憶體.在這些記憶體區域內,最為重要的是方法棧和堆記憶體。

   其次需要了解到物件的構建過程,物件的記憶體佈局,記憶體的佈局包括三塊區域——物件頭、例項資料和對其填充。更為重要的是關於物件建立後的訪問方式,包含控制程式碼和直接指標的方式。在這裡控制程式碼的訪問方式最為重要,控制程式碼的最大好處是 reference 中儲存的是穩定的控制程式碼地址,在物件移動(GC)是隻改變例項資料指標地址,reference 自身不需要修改。直接指標訪問的最大好處是速度快,節省了一次指標定位的時間開銷。如果是物件頻繁 GC 那麼控制程式碼方法好,如果是物件頻繁訪問則直接指標訪問好。

   最後需要了解到JVM的垃圾回收機制和記憶體分配機制,需要了解到引用計數法,可達性分析法,這兩種方法是配合使用的,引用計數計算物件的引用次數,而可達性分析法會分析物件的訪問情況。在垃圾回收中,需要針對每一代的演算法進行了解,涉及到新生代的標記-清除演算法,老年代的標記整理演算法,以及分代演算法。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2657660/,如需轉載,請註明出處,否則將追究法律責任。

相關文章