更新時(shí)間:2020-04-10 13:25:56 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2364次
提到Java虛擬機(jī)(JVM),可能大部分人的第一印象是“難”,但當(dāng)讓我們真正走入“JVM世界”的時(shí)候,會(huì)發(fā)現(xiàn)其實(shí)問(wèn)題并不像我們想象中的那么復(fù)雜。唯一真正令我們恐懼的,其實(shí)是恐懼本身。而作為整個(gè)JVM系列的首篇,本文將帶你解除剛開(kāi)始學(xué)習(xí)JVM時(shí)的種種疑惑。比如:什么是JVM?為什么學(xué)習(xí)JVM?怎么有效的學(xué)習(xí)JVM?帶著以上的這些問(wèn)題,讓我們一起走入JVM的世界吧。
一、為什么要學(xué)習(xí)JVM?
學(xué)習(xí)JVM無(wú)外乎以下幾個(gè)原因:
1、程序調(diào)優(yōu)
不同的程序(業(yè)務(wù)場(chǎng)景)需要不同的Jvm配置,比如設(shè)置不同的垃圾收集器、設(shè)置新生代和老生帶的內(nèi)存配置和占比等,不同的配置對(duì)于程序的運(yùn)行有著千差萬(wàn)別的影響。而Jvm默認(rèn)的配置只能保證程序能夠“運(yùn)行”,而想要“很好的運(yùn)行”甚至是“更好的運(yùn)行”,就是學(xué)習(xí)Jvm最主要的因素之一。
2、排查程序運(yùn)行問(wèn)題
有些程序可能在線上使用的時(shí)候會(huì)遇到各種各樣的問(wèn)題,而這些問(wèn)題通常都是致命的,比如內(nèi)存溢出,死鎖導(dǎo)致的程序運(yùn)行緩慢等,而這些問(wèn)題在開(kāi)發(fā)和小量并發(fā)測(cè)試階段是很容易被忽略的缺陷,所以學(xué)習(xí)好了Jvm才能在關(guān)鍵的時(shí)候,臨危不亂幫你掃除系統(tǒng)中的“頑疾”。
3、掌握了程序執(zhí)行的根本和原理
也就是很多人說(shuō)的:不但要“知其然”,還要“知其所以然”。
4、規(guī)避寫(xiě)代碼時(shí)候的一些錯(cuò)誤
比如避免重載可變長(zhǎng)參數(shù)的調(diào)用(后面文章會(huì)給出具體的案例)。
5、應(yīng)付面試
不得不說(shuō)這也是很多人學(xué)習(xí)的目的之一,當(dāng)然這也是積極的推動(dòng)力,如果你明白“鯰魚(yú)效應(yīng)”的話。
6、掌握了其他語(yǔ)言的通用機(jī)制
JVM還有一個(gè)強(qiáng)大之處是,它不止可以運(yùn)行Java程序,還可以運(yùn)行Scala、Clojure、Groovy,以及時(shí)下熱門的Kotlin,學(xué)習(xí)JVM便可以了解這些語(yǔ)言的通用機(jī)制,甚至于讓這些語(yǔ)言共享生態(tài)系統(tǒng)。
二、什么是JVM?
JVM簡(jiǎn)介:JVM是JavaVirtualMachine的縮寫(xiě),中文翻譯為Java虛擬機(jī),是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的。簡(jiǎn)單來(lái)說(shuō)JVM是用來(lái)解析和運(yùn)行Java程序的。
Java有一個(gè)非常重要的特點(diǎn)“平臺(tái)的無(wú)關(guān)性”,就是使用JVM實(shí)現(xiàn)的。Java語(yǔ)言只需要生成Jvm上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行,因?yàn)镴VM本身屏蔽了與具體平臺(tái)相關(guān)的信息,使得Java能夠“一次編譯,到處運(yùn)行”。
三、怎么有效的學(xué)習(xí)JVM?
以上了解了學(xué)習(xí)JVM的種種好處,但是怎么有效的學(xué)習(xí)JVM呢?有人可能一看到“JVM”或者“Java虛擬機(jī)”這幾個(gè)字就懵了,不知道它是啥,更別說(shuō)要怎么學(xué)了。而本小節(jié)就是要教大家怎么有效的學(xué)JVM,把JVM做一個(gè)知識(shí)點(diǎn)的劃分??梢哉f(shuō),掌握了以下列舉的知識(shí)點(diǎn),就是掌握了整個(gè)JVM。
JVM的知識(shí)點(diǎn),分為如下幾個(gè):
1、JVM的組成
只有了解了JVM的組成部分,才能算的上真正的了解了JVM,JVM的組成5個(gè)部分:堆、虛擬機(jī)棧、本地方法棧、程序計(jì)數(shù)器、方法區(qū),后面文章會(huì)分別介紹5個(gè)部分的具體用途。
2、多種垃圾回收算法
Jvm中有很多垃圾回收算法,不同的算法優(yōu)缺點(diǎn)也各不相同,比如:標(biāo)記清除算法和復(fù)制算法、標(biāo)記清楚算法會(huì)產(chǎn)生多種空間碎片、復(fù)制算法把內(nèi)存分為兩塊,性能雖然很好但是每次只能使用一塊,又浪費(fèi)了內(nèi)存的空間,那有沒(méi)有相對(duì)完美的算法呢?答案肯定是有的,由于篇幅的原因,后面文章會(huì)詳細(xì)講解。
3、多種垃圾收集器
Jvm的垃圾收集器有很多,比如最早版本的串行收集器Serial,發(fā)展歷史最悠久的收集器,它是采用復(fù)制算法的新生代收集器,它是一個(gè)單線程收集器,它在進(jìn)行垃圾收集時(shí),必須暫停其他所有的工作線程,直至Serial收集器收集結(jié)束為止(“StopTheWorld”)。還有CMS(ConcurrentMarkSweep)收集器是一種以獲取最短回收停頓時(shí)間為目標(biāo)的收集器;還有比較前沿的G1(Garbage-First)收集器等。
學(xué)習(xí)這些收集器,一方面是為自己程序配置合適的收集器,另一方面是每個(gè)收集器的設(shè)置參數(shù)都不相同,學(xué)習(xí)了這些收集器的配置之后,可以為程序設(shè)置最優(yōu)的運(yùn)行匹配參數(shù)。
4、JVM分析工具
Jvm的分析工具用于排查程序運(yùn)行的缺陷,找出程序的問(wèn)題所在,從而保證程序的穩(wěn)定運(yùn)行,Jvm分析器分為:命令行工具(官方稱之為實(shí)驗(yàn)性質(zhì)的工具,但穩(wěn)定性是不容置疑的),還有視圖分析工具,前者當(dāng)然優(yōu)于后者,但后者是建立在前者的基礎(chǔ)上的,本系列后面會(huì)詳細(xì)的把每個(gè)工具進(jìn)行深入的講解。
5、Java類加載機(jī)制
Java類加載機(jī)制,講的是Java的類在Jvm中的加載以及運(yùn)行機(jī)制,對(duì)于認(rèn)識(shí)Java是怎么運(yùn)行的有著非常大的幫助,這也是學(xué)習(xí)Java非常有趣的一點(diǎn),你可以看到Java運(yùn)行的整個(gè)過(guò)程,是完全透明化的,給人一種“掌控感”,這是Java語(yǔ)言天生支持的,所以會(huì)覺(jué)得Java這門語(yǔ)言很有趣。
6、JVM常用優(yōu)化配置
學(xué)習(xí)Jvm收益最大的其實(shí)就是,使用Jvm的這些常用配置,讓你的程序運(yùn)行的更高效,所以對(duì)于這方面的學(xué)習(xí)是必不可少的。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java虛擬機(jī)視頻”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java零基礎(chǔ)學(xué)習(xí)視頻
2020Java零基礎(chǔ)教程:http://m.ilovecolors.com.cn/javavideo/110.html
2020JavaSE進(jìn)階:http://m.ilovecolors.com.cn/javavideo/144.html
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)