java虚拟机_Oracle独家:Java虚拟机学习指南
大家好,我是極客時間《深入拆解 Java 虛擬機》作者、Oracle Labs 高級研究員鄭雨迪。有幸借這個專題的機會,能和大家分享為何 Java 工程師要學 Java 虛擬機?如何掌握 Java 虛擬機?
工欲善其事,必先利其器
“為什么學 Java 虛擬機”這個問題,就和“為什么要學習數據結構和算法”是一個道理:工欲善其事,必先利其器。
我總結了三點必須要學好 Java 虛擬機的理由:
Java 已然是一門主流的工程語言,擁有大量的應用。作為 Java 語言的執行引擎,Java 虛擬機的調優一直是熱點話題,成為各大廠面試的壓軸題。
此外,主流的 Java 虛擬機 -- 也就是 OpenJDK 的 HotSpot VM-- 是完全開源的。只要讀得懂 C++ 代碼,便能夠繞開網絡上的“二手”資料,直面 Java 實現的核心邏輯。
Java 在不斷地增添新特性、新功能,其中不少都“借鑒”自其他編程語言。同樣,通過學習 Java 虛擬機,在遇到其他語言實現時也能夠觸類旁通,迅速地完成調優、排錯工作。
另外,我注意到國內大廠不再只滿足于使用開源項目,而是積極參與這些項目的開發。例如 Alibaba 在去年便已成為 OpenJDK 項目執行委員會的一員,可以左右 Java 語言的發展。一旦越來越多的大廠加大對底層、對這些開源項目的投入,勢必會產生許多對高精尖技術專家的需求。
所以,作為一名 Java 程序員,在盡情享受 Java 虛擬機帶來好處的同時,你還應該去了解和思考“這些技術特性是如何實現的”,去了解最底層的原理。只有熟悉 JVM,你才能在遇到 OutOfMemory 等異常時,不會束手無策,不會一臉懵逼的上網找解決辦法,最后就算改了幾個啟動參數解決了問題,也還是云里霧里。
那該如何揭開 Java 虛擬機迷霧,深入底層,將 Java 虛擬機拿下?我分為 3 個階段來分享,每個階段大家又該具備哪些技能?
先附上一張我制作的「Java 虛擬機知識框架圖」,涵蓋了 Java 虛擬機的所有學習要點,建議保存。
此外,我去年在極客時間推出的《深入拆解 Java 虛擬機》專欄,就是希望你可以從底層出發,揭秘 Java 虛擬機的工作原理,讓你更好地理解 Java 語言特性,寫出簡潔高效的代碼,并掌握診斷手法和調優方式。同時,我也會講到 Orcale GraalVM 黑科技,讓大家了解到前沿技術熱點,比如編譯器 Graal、語言實現框架 Truffle 等待。不管你是在準備面試、還是想進階 Java,Java 虛擬機絕對是一把助力的利劍。
一、Java 虛擬機新手入門雖然我們和語言朝夕相處,但不少人提及代碼的詳細運行過程也難免會一時語塞。這都是由于 Java 虛擬機封裝得太好,讓使用者幾乎感覺不到它的存在,也導致不少初學者學習 Java 虛擬機時摸不著頭腦,找不到脈絡。
Java 虛擬機的基本原理及運行機制,對于初學者來說,是必須要掌握的,至少我是這么要求的。不然根基不牢,何來平地高樓起。
所以我也花了一整個模塊的篇幅來逐次介紹 Java 虛擬機的設計決策以及工程實現,讓大家在學習 Java 虛擬機時,可以知其然,也要知其所以然。
以下是專欄里的部分原理內容,大家對照著,看看是否已掌握。
Java 代碼有很多種運行方式,那 Java 虛擬機具體是怎樣運行 Java 字節碼的?[第 1 講 | Java 代碼是怎么運行的?]
boolean 在 Java 虛擬機是以整數形式表示的 --0 代表 false,1 代表 true。那么 2 又代表什么呢?為什么要這樣設計?[第 2 講 | Java 的基本類型]
都說反射慢,究竟為什么慢?[第 7 講 | JVM 是如何實現反射的?]
垃圾回收的原理是什么?如何優化? [第 11 講 | 垃圾回收]
Java 內存模型是在解決什么疑難雜癥? [第 13 講 | Java 內存模型]
告別了 GRUD 研究員,如果你想再進一步進階,那么以下是知識點是你必須要掌握的。弄懂了這些,你基本上掌握了面試官 80% 的問題。
怎么判定對象已經“死去”?垃圾回收的原理是什么? [第 11 講 | 垃圾回收(上)]
Java 虛擬機的堆是如何劃分的? [第 12 講 | 垃圾回收(下)]
Java 內存模型是在解決什么疑難雜癥? [第 13 講 | Java 內存模型]
如何用紅綠燈類比 Java 虛擬機中的各項鎖優化?[第 14 講 | Java 虛擬機是怎么實現 synchronized 的?]
即時編譯器有哪些優化?[第 16 講 | 即時編譯(上) ]
即時編譯器應用了哪些面向循環的編譯優化?[第 25 講 | 循環優化]
JVM 垃圾回收算法
當然,我希望大家能系統學習 Java 虛擬機,而不是為了面試去刷題。更要的是希望這個專欄能激發出大家學習 Java 虛擬機乃至其他底層工作、前沿工作的熱情。
就像我開設這個專欄一樣,為不辜負大家的信任,我幾乎每篇專欄都會大量閱讀 HotSpot 的源代碼,和同事討論實現背后的設計理念,在這個過程中,我也發現了一些 HotSpot 中的 Bug,或者年久失修的代碼,又或者是設計不合理的地方。苦中有樂,忙碌中又有驚喜。
《深入拆解 Java 虛擬機》3 月 20 日(3 天后)起漲價至¥99,限時拼團¥58
三、Java 虛擬機高手在我的專欄中,有一條令我印象頗深的留言,講的是他如何解決反射調用效率低下的問題。之所以印象深刻,是因為他的做法和 Java 虛擬機中附帶的自動優化方式完全一致。換個角度來看,他其實已經具備為 Java 虛擬機設計優化的能力,也完全可以將這一優化實現回饋給 OpenJDK 社區。
舉一反三,主動的解 t 決問題,且能回饋開源。這必然是高手需要具備的能力之一。
這時候大家必須去想的一個問題:如何讓 Java(以及其他 Java 虛擬機語言,如 Scala、Kotlin 等)跑得更快?
主要分三個方面去考慮:
什么是虛方法調用?如何消除虛方法調用開銷?[第 20 講 | 方法內聯]
Java 虛擬機是如何進行硬件加速的?[第 22 講 |HotSpot 虛擬機的 intrinsic]
我需要手工避免 new 語句嗎?[第 23 講 | 逃逸分析]
另外,我也推薦你看看專欄里這些內容,追上 JVM 的前沿技術熱點:
第 34 講 | Graal:用 Java 編譯 Java
第 35 講 | Truffle:語言實現框架
第 36 講 | SubstrateVM:AOT 編譯框架
再之,Java 虛擬機有很多工具,需要大家熟練掌握,比如 javap-- 能夠將 class 文件反匯編人類可讀格式的工具;OpenJDK 項目 Code Tools-- 包含了好幾個實用小工具,又或者是 ASM--Java 字節碼框架等等。
在專欄里,我專門有幾篇文章來介紹各類工具的使用:
如何通過注解處理器自動生成業務邏輯? [第 27 講 | 注解處理器]
如何標準化地衡量程序性能? [第 28 講 | 基準測試框架 JMH]
如何對 Java 虛擬機進行監控及診斷?[第 30 講 | Java 虛擬機的監控及診斷工具(命令行篇)]
《深入拆解 Java 虛擬機》3 月 20 日(3 天后)起漲價至¥99,限時拼團¥58,已超過 2.2w 人加入學習,想認真進階 Java 的同學,請抓緊搭上這趟末班車(方式:點擊下圖)
下面給大家截了部分讀者評價,你可以參考。
可以點擊看大圖
額外福利:
今日參團,還可獲得 Java 學習禮包:鄭雨迪總結的《Java 虛擬機知識圖譜》+《Java 經典圖書 *6》+《Java 面試卡片》。(具體操作:將截圖在后臺,審核通過后立即獲得鏈接。)
點擊“”,試讀或訂閱
總結
以上是生活随笔為你收集整理的java虚拟机_Oracle独家:Java虚拟机学习指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10年老电脑如何提速_中国电信宣布将对宽
- 下一篇: wps分享为什么要登入_【知识分享】柴油