微信公眾號【Java技術(shù)江湖】一位阿里 Java 工程師的技術(shù)小站。作者黃小斜,專注 Java
相關(guān)技術(shù):SSM、SpringBoot、MySQL、分布式、中間件、集群、Linux、網(wǎng)絡(luò)、多線程,偶爾講點(diǎn)Docker、ELK,同時(shí)也分享技術(shù)干貨和學(xué)習(xí)經(jīng)驗(yàn),致力于Java全棧開發(fā)?。P(guān)注公眾號后回復(fù)”Java“即可領(lǐng)取
Java基礎(chǔ)、進(jìn)階、項(xiàng)目和架構(gòu)師等免費(fèi)學(xué)習(xí)資料,更有數(shù)據(jù)庫、分布式、微服務(wù)等熱門技術(shù)學(xué)習(xí)視頻,內(nèi)容豐富,兼顧原理和實(shí)踐,另外也將贈(zèng)送作者原創(chuàng)的Java學(xué)習(xí)指南、Java程序員面試指南等干貨資源)
?
? ? ? ? ? ? ? ? ? ? ?
?
轉(zhuǎn)自:https://mp.weixin.qq.com/s/EjVfk1iOuQUjLfPxt_DJ7Q
?
是大名鼎鼎的Java 虛擬機(jī), ?據(jù)說這個(gè)星球上每天有900多萬程序員和我打交道,這真是一個(gè)驚人的數(shù)字。 這900多萬人中不少人對我的技術(shù)內(nèi)幕非常感興趣,
有事兒沒事兒都要把我“大卸八塊”, 深入了解一下。甚至還有人從我的出生地--源代碼--開始看起,弄得人家連一點(diǎn)隱私都沒有了。
?
當(dāng)然也有很多人對我的運(yùn)行機(jī)理愛理不理, 理由很簡單: Java虛擬機(jī)相關(guān)的事情只有在面試時(shí)才會問道,背誦一下那些垃圾回收算法,應(yīng)付過去就可以了!
?
真的是這樣嗎? ?面試官為什么喜歡問JVM原理? 難道他們沒什么可問的了? 或者是只是為了展示他們的卓爾不群? 高人一等?壓你一頭?
?
我想都不是, ?請注意一下我的名字: Java虛擬機(jī), ?我是一個(gè)虛擬機(jī)??!
?
雖然不是像VMWare, VirtualBox那樣可以完全虛擬出一個(gè)包括內(nèi)存,硬盤,CPU的硬件計(jì)算機(jī)出來, 我至少也是個(gè)Soft CPU啊,
有自己的指令集,有自己獨(dú)有的可執(zhí)行文件格式, 有自己獨(dú)特的基于棧而不是寄存器的執(zhí)行方式,還有那久經(jīng)考驗(yàn)的垃圾回收機(jī)制......
?
作為一個(gè)口口聲聲說熱愛編程,立志有寫出偉大軟件來改變世界的程序員, 少年, 難道你竟然對這么有趣的東西視而不見?
?
對軟件技術(shù)的好奇心是你最終成為偉大程序員的第一驅(qū)動(dòng)力, 如果你對技術(shù)不愿意深究,
不愿意了解背后的原理,如果你不愿意像一個(gè)調(diào)皮搗蛋的熊孩子那樣把一個(gè)玩具變成零件,然后再組裝起來(嗯, 實(shí)際上永遠(yuǎn)都組裝不起來了) ,
我真的懷疑你在這個(gè)行業(yè)能呆多久,走多遠(yuǎn)。
?
我剛才提到了有趣, 那真的有用嗎?
?
表面上看是沒有用處的,至少短期看來是沒有用處的, 你寫程序,運(yùn)行程序,然后吃飯,睡覺。
?
管你什么基于棧的虛擬機(jī),什么方法區(qū),堆, 垃圾回收, ?生活很美好,世界也很大, 我想去看看, 不要用這些煩心事來煩我。
如果你想一直生活在軟件開發(fā)的表層, 那肯定是沒有問題的, 如果你想像Neo那樣,把這個(gè)世界看個(gè)清清楚楚,明明白白,真真切切, 就需要修煉一下內(nèi)力,
做為Java 程序員, 理解Java虛擬機(jī)就是那個(gè)扎馬步的基本功。
?
舉個(gè)例子, 理解Class 文件格式, 就能理解ASM是怎么在運(yùn)行時(shí)“艱難的”動(dòng)態(tài)生成字節(jié)碼的, 然后就會知道CGLib是怎么改善它, 讓它容易使用的。
?而CGLib可是Spring AOP賴以生存的一大基礎(chǔ)啊。 這一路走來,是不是對AOP的理解更加透徹了?
?
你腦海中甚至能想象出來字節(jié)碼怎么被動(dòng)態(tài)的創(chuàng)建,被Classloader 加載, 形成新的Class, ? 然后對你的業(yè)務(wù)類進(jìn)行攔截的過程。
看透世界的感覺不要太爽, ? ?如果你非要說我會用Spring 的AOP就行了, 那我也沒辦法, 人各有志嘛。
?
擴(kuò)展一下, 現(xiàn)在我的家中上入住了不少動(dòng)態(tài)語言, Jython, JRuby , Clojure , Scala 等等,
他們可都需要?jiǎng)討B(tài)的生成字節(jié)碼來運(yùn)行?。ùa農(nóng)翻身備注: Scala 也可以直接編譯成class 文件), 你看看理解了Class 文件格式得有多大的好處。
?
還有啊, 理解了一些重要的字節(jié)碼指令以后,你就會知道所謂的面向?qū)ο螅?尤其是你寫的那些個(gè)漂亮的OO代碼, 在我這里已經(jīng)“退化”成函數(shù)調(diào)用了,
不知道你會不會沮喪, 但是沒有辦法, 咱們計(jì)算機(jī)的本質(zhì)就是這樣,順序,循環(huán),分支, 函數(shù)調(diào)用。 作為補(bǔ)償, 我會讓你了解多態(tài)的秘密,
這可是很多面向?qū)ο笳Z言的基礎(chǔ)。
?
說到函數(shù)調(diào)用, 你寫的Java程序在運(yùn)行時(shí)會形成的棧幀, 這可真是一個(gè)超級重要的概念,
不僅在我這里有,物理CPU和內(nèi)存在運(yùn)行本地代碼的時(shí)候也有,雖然我和他們的結(jié)構(gòu)不同, 但都是為了完成一個(gè)目的: ?表達(dá)一個(gè)函數(shù)在運(yùn)行時(shí)的結(jié)構(gòu)。
?
了解了這個(gè)家伙, 你就知道函數(shù)在機(jī)器級是怎么調(diào)用的, 參數(shù)是怎么傳遞的, 遞歸是怎么回事, 尾遞歸是怎么回事(我竟然不支持?。?。 ?也許你會跑去看看匯編,
去看看緩沖區(qū)溢出攻擊, 各種知識點(diǎn)開始連接,形成一張大網(wǎng),這種感覺是極爽的。
?
這樣的例子我還可以舉出很多,但是估計(jì)很多人已經(jīng)不耐煩了,就此打住。
?
你們?nèi)祟愓f計(jì)算機(jī)是門科學(xué), 但是科學(xué)的成分在哪里呢? ?在我看來更像一門工程或者技術(shù), ?核心的基礎(chǔ)概念真的不多, 花點(diǎn)功夫把他們掌握了,受益終生。
?
前些天我偷偷地閱讀了你們的小說《天龍八部》, 里邊的掃地僧可真是厲害, 輕輕松松就把慕容博和蕭遠(yuǎn)山兩位絕頂高手制得服服帖帖,老老實(shí)實(shí), 這說明的什么問題?
內(nèi)功的修煉真是很重要啊。
?
jvm.png
前言
JVM(Java Virtual Machine)Java 虛擬機(jī)是整個(gè) java 平臺的基石,是 java
系統(tǒng)實(shí)現(xiàn)硬件無關(guān)與操作系統(tǒng)無關(guān)的關(guān)鍵部分,是保障用戶機(jī)器免于惡意代碼損害的屏障。Java開發(fā)人員不需要了解JVM是如何工作的,**但是,**了解 JVM
有助于我們更好的開(通)發(fā)(過) java(公司) 程(面)序(試)。
寫這篇文章的目的:
* 總結(jié)所學(xué)的 JVM 知識
* 幫助想了解 JVM 的朋友,知無不言,言無不盡
本篇文章將會介紹一下內(nèi)容:
* 什么是 JVM <https://www.jianshu.com/p/380fa5c92dcc#ll>
* JVM 用來做什么事情 <https://www.jianshu.com/p/380fa5c92dcc#ll>
* JVM 生命周期 <https://www.jianshu.com/p/380fa5c92dcc#ll>
* JVM 的整體架構(gòu) <https://www.jianshu.com/p/380fa5c92dcc#ll>
* JVM 內(nèi)存管理 <https://www.jianshu.com/p/380fa5c92dcc#ll>
* 總結(jié) <https://www.jianshu.com/p/380fa5c92dcc#ll>
什么是 JVM
要想說明白什么 JVM 就不得不提另外兩個(gè)概念,JRE 和 JDK,初學(xué)者總是把這幾個(gè)概念搞混
java-tutorial.png
?
Jvm,Jre,Jdk 都是 java 語言的支柱,他們分工協(xié)作。但不同的是 Jdk 和 Jre 是真實(shí)存在的,而 Jvm 是一個(gè)抽象的概念,并不真實(shí)存在。
JDK
JDK(Java Development Kit) 是 Java 語言的軟件開發(fā)工具包(SDK)。JDK 物理存在,是 programming
tools、JRE 和 JVM 的一個(gè)集合
jdk.png
JRE
JRE(Java Runtime Environment)Java 運(yùn)行時(shí)環(huán)境,JRE 物理存在,主要由Java API 和 JVM 組成,提供了用于執(zhí)行
java 應(yīng)用程序最低要求的環(huán)境。
jre.png
?
JVM
JVM(Java Virtual Machine) 是一種軟件實(shí)現(xiàn),執(zhí)行像物理機(jī)程序的機(jī)器(即電腦)。
本來,Java被設(shè)計(jì)基于從物理機(jī)器分離實(shí)現(xiàn)WORA( 寫一次,隨處運(yùn)行 )的虛擬機(jī)上運(yùn)行,雖然這個(gè)目標(biāo)已經(jīng)幾乎被遺忘。
JVM 并不是專為 Java 所實(shí)現(xiàn)的運(yùn)行時(shí),實(shí)際上只要有其他編程語言的編譯器能生成正確 Java bytecode 文件,則這個(gè)語言也能實(shí)現(xiàn)在JVM上運(yùn)行。
因此,JVM 通過執(zhí)行 Java bytecode 可以使 java 代碼在不改變的情況下運(yùn)行在各種硬件之上。
jVM 有如下特點(diǎn):
* 基于堆棧的虛擬機(jī) :最流行的計(jì)算機(jī)體系結(jié)構(gòu),如英特爾X86架構(gòu)和ARM架構(gòu)上運(yùn)行基于寄存器 。 但是,JVM是基于棧的。
* 符號引用 :除了基本類型以外的數(shù)據(jù)(類和接口)都是通過符號來引用,而不是通過顯式地使用內(nèi)存地址來引用。
* 垃圾收集 :一個(gè)類的實(shí)例是由用戶明確創(chuàng)建的代碼和垃圾回收自動(dòng)銷毀。
通過明確界定的基本數(shù)據(jù)類型的保證平臺的獨(dú)立性 :傳統(tǒng)的語言,如C / C ++根據(jù)平臺有不同的int型的大小。
JVM中明確規(guī)定了基本數(shù)據(jù)類型,以保持它的兼容性和保證平臺的獨(dú)立性。
* 網(wǎng)絡(luò)字節(jié)順序 :Java class文件用網(wǎng)絡(luò)字節(jié)碼順序來進(jìn)行存儲:為了保證和小端的Intel
x86架構(gòu)以及大端的RISC系列的架構(gòu)保持無關(guān)性,JVM使用用于網(wǎng)絡(luò)傳輸?shù)木W(wǎng)絡(luò)字節(jié)順序,也就是大端。
**Java bytecode **
為了實(shí)現(xiàn)WORA,JVM使用Java字節(jié)碼,java(用戶語言)和機(jī)器語言之間的中間語言。
該Java字節(jié)碼是部署Java代碼的最小單位。
JVM 用來做什么
基于安全方面考慮,JVM 要求在 class 文件中使用許多強(qiáng)制性的語法和機(jī)構(gòu)化約束,但任意一門功能性語言都可以表示為一個(gè)能被 JVM 接受的有效的
class 文件。作為一個(gè)通用的、機(jī)器無關(guān)的執(zhí)行平臺,任何其他語言的實(shí)現(xiàn)者都可將 JVM 當(dāng)作他的語言產(chǎn)品交付媒介。
JVM 中執(zhí)行以下操作:
* 加載代碼
* 驗(yàn)證代碼
* 執(zhí)行代碼
* 提供運(yùn)行環(huán)境
JVM 提供定義了:
* 存儲區(qū)
* 類文件格式
* 寄存器組
* 垃圾回收堆
* 致命錯(cuò)誤報(bào)告等
JVM 生命周期
* 啟動(dòng):任何一個(gè)擁有main函數(shù)的class都可以作為JVM實(shí)例運(yùn)行的起點(diǎn)
* 運(yùn)行:
main函數(shù)為起點(diǎn),程序中的其他線程均有它啟動(dòng),包括daemon守護(hù)線程和non-daemon普通線程。daemon是JVM自己使用的線程比如GC線程,main方法的初始線程是non-daemon。
* 消亡:所有線程終止時(shí),JVM實(shí)例結(jié)束生命。
JVM 的整體架構(gòu)
先看一下 java 代碼執(zhí)行過程
關(guān)于Jvm知識看這一篇就夠了
轉(zhuǎn)自:?純潔的微笑?純潔的微笑 <>?3月11日
2016年左右的時(shí)候讀了周志明《深入理解Java虛擬機(jī):JVM高級特性與最佳實(shí)踐》,讀完之后受益匪淺,讓我對Java虛擬機(jī)有了一個(gè)完整的認(rèn)識,這是Jvm書籍中最好的讀物之一。
?
后來結(jié)合實(shí)際工作中遇到的問題,寫了一系列關(guān)于Jvm的文章,其中開篇的幾篇內(nèi)容大部分參考于此書,后期加入自己一些實(shí)戰(zhàn)的理解,轉(zhuǎn)載了幾篇高質(zhì)量的文章,就形成了此系列讀物。
?
?
?
在金三銀四的跳槽季中,很多小伙伴們都已經(jīng)蠢蠢欲動(dòng),將此系列文章整理出來,希望可以幫助到大家。
?
*
Jvm系列(一):java類的加載機(jī)制
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247483934&idx=1&sn=41c46eceb2add54b7cde9eeb01412a90&chksm=ebf6da61dc81537721d36aadb5d20613b0449762842f9128753e716ce5fefe2b659d8654c4e8&scene=21#wechat_redirect>
?
?
第一篇文章講的是Java類的加載機(jī)制,也是我在博客園最收歡迎的Jvm文章,讀完之后你會了解什么是類加載器、類加載機(jī)制、雙親委派模型等內(nèi)容。
?
*
Jvm系列(二):JVM內(nèi)存結(jié)構(gòu)
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247483949&idx=1&sn=8b69d833bbc805e63d5b2fa7c73655f5&chksm=ebf6da52dc815344add64af6fb78fee439c8c27b539b3c0e87d8f6861c8422144d516ae0a837&scene=21#wechat_redirect>
?
?
這篇文章描述了Java虛擬機(jī)的內(nèi)存結(jié)構(gòu),內(nèi)存每個(gè)區(qū)域作用,如何通過參數(shù)對各個(gè)區(qū)域進(jìn)行控制。
?
*
Jvm系列(三):GC算法? 垃圾收集器
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247483952&idx=1&sn=ea12792a9b7c67baddfaf425d8272d33&chksm=ebf6da4fdc815359869107a4acd15538b3596ba006b4005b216688b69372650dbd18c0184643&scene=21#wechat_redirect>
?
講述了Jvm垃圾回收的經(jīng)典算法,以及各種垃圾回收機(jī)制,對象存活判斷等。
?
*
Jvm系列(四):jvm調(diào)優(yōu)-命令篇
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247483966&idx=1&sn=dfa3375d36aa2c0c25a775522e381e62&chksm=ebf6da41dc815357e0d53c73865a23f41219e75bac5a4d510bfa31cc51594b59a20e2e4f6cb8&scene=21#wechat_redirect>
這篇文章講述了如何通過Jvm命令去調(diào)優(yōu),各Jvm命令使用方法。
?
*
Jvm系列(五):Java GC分析
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247483986&idx=1&sn=a2d7c9f2e73dfcc938a3ec934b3ad3a4&chksm=ebf6da2ddc81533beb5e6fb54c872b5f79524d0780c484718a57ca0712916cd67bda7dee4073&scene=21#wechat_redirect>
?
這是非常有名的一張圖,簡單明了展示了GC日志的構(gòu)成
文章介紹如何分析GC日志來診斷Java項(xiàng)目的運(yùn)行狀態(tài),GC分析是生產(chǎn)調(diào)優(yōu)的重要手段之一。
?
*
Jvm系列(六):Java服務(wù)GC參數(shù)調(diào)優(yōu)案例
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247484007&idx=1&sn=e8d150bb760d0a92aad594152fc47a9d&chksm=ebf6da18dc81530eedeaff89d746cf48e7b2bdec602239faaeb4e8e490e0a4387e2a8890c327&scene=21#wechat_redirect>
一名網(wǎng)友根據(jù)GC日志,進(jìn)行Jvm調(diào)優(yōu)的經(jīng)典案例
?
*
Jvm系列(七):jvm調(diào)優(yōu)-工具篇
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247484023&idx=1&sn=39be119fdf3132240adc84a85bf8a054&chksm=ebf6da08dc81531e3719389555150f2d0237554b6b6c07a123efdea7c78c0ae2f064cc577bd4&scene=21#wechat_redirect>
介紹了Jvm調(diào)優(yōu)各種工具的使用
?
*
Jvm系列(八):jvm知識點(diǎn)總覽
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247484038&idx=1&sn=e083cc8b248461c8916a819119b059c3&chksm=ebf6daf9dc8153ef27ecd857e6cc85372735e84042679c133892d0993074371a46dd2c28b8b3&scene=21#wechat_redirect>
如何你只是想通過面試,其實(shí)只要看一篇就夠了,這篇文章將Jvm中的關(guān)鍵知識點(diǎn)進(jìn)行了匯總。
?
*
Jvm系列(九):如何優(yōu)化Java GC
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247484042&idx=1&sn=51d2ed451151be872b601007597dd47f&chksm=ebf6daf5dc8153e3a7cb88ca97621cfae5aeaaeec0a1ff63e16278fbea6a43457e50a7fc9f0b&scene=21#wechat_redirect>
翻譯自國外的一篇Java GC文章,文章詳細(xì)描述幾種GC調(diào)優(yōu)的方式,值得借鑒。
?
*
Jvm系列(十):教你如何成為Java的OOM Killer
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247484071&idx=1&sn=84604a51fd18b91f73c46507c182540a&chksm=ebf6dad8dc8153cebb029372c0745a3c6570e527e1f95cee2fb9fb33c50d46c64f20722a3d96&scene=21#wechat_redirect>
也是線上一場線上Jvm實(shí)戰(zhàn)調(diào)優(yōu)的經(jīng)歷,看著挺爽。
?
*
Jvm系列(十一):Java 8-從持久代到metaspace
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247484074&idx=1&sn=826318867783afaf99f62b38b2f5c268&chksm=ebf6dad5dc8153c32a6ce0201afe310b47135b07c8bb028a8fd9df7ecaf6e60950a7847c7df5&scene=21#wechat_redirect>
Java 8 Jvm內(nèi)存變化
?
*
Jvm系列(十二):Java 8的新特性—終極版
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247484106&idx=1&sn=2a2a64ce7387c6221214c1c85bdeca76&chksm=ebf6dab5dc8153a31ccbd74f32ff0efc3bb108fac84273860f87895b1dec85c0844092b2aa60&scene=21#wechat_redirect>
杜琪翻譯的?Java 8?的新特性。
?
*
一個(gè)腳本引發(fā)的血案
<http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247483921&idx=1&sn=7bb57b405e808c369159b80b32866a1a&chksm=ebf6da6edc815378b5486ca644de17f32bbdc68cc4430a9d62755cd4bdad6d04dc69f592f51c&scene=21#wechat_redirect>
我們曾經(jīng)線上出現(xiàn)事故后,定位分析的經(jīng)歷,結(jié)局出乎意料。
?
?
?
熱門工具 換一換
感谢您访问我们的网站,您可能还对以下资源感兴趣:
调教肉文小说-国产成本人片免费av-空姐av种子无码-在线观看免费午夜视频-综合久久精品激情-国产成人丝袜视频在线观看软件-大芭区三区四区无码-啊啊好爽啊啊插啊用力啊啊-wanch视频网-国产精品成人a免费观看