好程序員Java分享JVM從哪方面入手學習

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

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

  學習JVM首先需要了解Java的運行時數據區域,Java的數據區域包括程序記錄器,Java

  虛擬機棧,本地方法棧,堆,方法區,運行時常量池和直接內存.在這些內存區域內,最爲重要的是方法棧和堆內存。

  其次需要瞭解到對象的構建過程,對象的內存佈局,內存的佈局包括三塊區域——對象頭、實例數據和對其填充。更爲重要的是關於對象創建後的訪問方式,包含句柄和直接指針的方式。在這裏句柄的訪問方式最爲重要,句柄的最大好處是 reference 中存儲的是穩定的句柄地址,在對象移動(GC)是隻改變實例數據指針地址,reference 自身不需要修改。直接指針訪問的最大好處是速度快,節省了一次指針定位的時間開銷。如果是對象頻繁 GC 那麼句柄方法好,如果是對象頻繁訪問則直接指針訪問好。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章