不只是專(zhuān)用于Java語(yǔ)言,只要生成的編譯文件匹配JVM對(duì)加載編譯文件格式" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢(xún) 在線咨詢(xún)
15158846557 在線咨詢(xún)
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > 十年技術(shù)大牛:Java虛擬機(jī)你搞明白了嗎

十年技術(shù)大牛:Java虛擬機(jī)你搞明白了嗎

時(shí)間:2023-07-15 03:45:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-07-15 03:45:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

十年技術(shù)大牛:Java虛擬機(jī)你搞明白了嗎:java虛擬機(jī)(java virtual machine,JVM),一種能夠運(yùn)行java字節(jié)碼的虛擬機(jī)。作為一種編程語(yǔ)言的虛擬機(jī),實(shí)際上




不只是專(zhuān)用于Java語(yǔ)言,只要生成的編譯文件匹配JVM對(duì)加載編譯文件格式要求,任何語(yǔ)言都可以由JVM編譯運(yùn)行。




比如kotlin、scala等。




**jvm有很多,不只是Hotspot,還有JRockit、J9等等JVM的基本結(jié)構(gòu)**JVM由三個(gè)主要的子系統(tǒng)構(gòu)成




類(lèi)加載子系統(tǒng)




運(yùn)行時(shí)數(shù)據(jù)區(qū)(內(nèi)存結(jié)構(gòu))




執(zhí)行引擎

運(yùn)行時(shí)數(shù)據(jù)區(qū)(內(nèi)存結(jié)構(gòu))1.方法區(qū)(Method Area)




類(lèi)的所有字段和方法字節(jié)碼,以及一些特殊方法如構(gòu)造函數(shù),接口代碼也在這里定義。簡(jiǎn)單來(lái)說(shuō),所有定義的方法的




信息都保存在該區(qū)域,靜態(tài)變量+常量+類(lèi)信息(構(gòu)造方法/接口定義)+運(yùn)行時(shí)常量池都存在方法區(qū)中,雖然Java虛擬




機(jī)規(guī)范把方法區(qū)描述為堆的一個(gè)邏輯部分,但是它卻有一個(gè)別名叫做Non-Heap(非堆),目的應(yīng)該是為了和Java的




堆區(qū)分開(kāi)




2.堆(Heap)




虛擬機(jī)啟動(dòng)時(shí)自動(dòng)分配創(chuàng)建,用于存放對(duì)象的實(shí)例,幾乎所有對(duì)象都在堆上分配內(nèi)存,當(dāng)對(duì)象無(wú)法在該空間申請(qǐng)到內(nèi)




存是將拋出OutOfMemoryError異常。同時(shí)也是垃圾收集器管理的主要區(qū)域。

2.1 新生代(Young Generation)




類(lèi)出生、成長(zhǎng)、消亡的區(qū)域,一個(gè)類(lèi)在這里產(chǎn)生,應(yīng)用,最后被垃圾回收器收集,




結(jié)束生命。




新生代分為兩部分:伊甸區(qū)(Eden space)和幸存者區(qū)(Survivor space),所有的類(lèi)都是在伊甸區(qū)被new出來(lái)的。




幸存區(qū)又分為From和To區(qū)。當(dāng)Eden區(qū)的空間用完是,程序又需要?jiǎng)?chuàng)建對(duì)象,JVM的垃圾回收器將Eden區(qū)進(jìn)行垃圾回




收(Minor GC),將Eden區(qū)中的不再被其它對(duì)象應(yīng)用的對(duì)象進(jìn)行銷(xiāo)毀。然后將Eden區(qū)中剩余的對(duì)象移到From




Survivor區(qū)。若From Survivor區(qū)也滿了,再對(duì)該區(qū)進(jìn)行垃圾回收,然后移動(dòng)到To Survivor區(qū)。




2.2 老年代(Old Generation)




新生代經(jīng)過(guò)多次GC仍然存貨的對(duì)象移動(dòng)到老年區(qū)。若老年代也滿了,這時(shí)候?qū)l(fā)生Major GC(也可以叫Full GC),




進(jìn)行老年區(qū)的內(nèi)存清理。若老年區(qū)執(zhí)行了Full GC之后發(fā)現(xiàn)依然無(wú)法進(jìn)行對(duì)象的保存,就會(huì)拋出




OOM(OutOfMemoryError)異常




2.3 元空間(Meta Space)




在JDK1.8之后,元空間替代了永久代,它是對(duì)JVM規(guī)范中方法區(qū)的實(shí)現(xiàn),區(qū)別在于元數(shù)據(jù)區(qū)不在虛擬機(jī)當(dāng)中,而是用




的本地內(nèi)存,永久代在虛擬機(jī)當(dāng)中,永久代邏輯結(jié)構(gòu)上也屬于堆,但是物理上不屬于。




為什么移除了永久代?




參考官方解釋http://openjdk.java.net/jeps/122




大概意思是移除永久代是為融合HotSpot與 JRockit而做出的努力,因?yàn)镴Rockit沒(méi)有永久代,不需要配置永久代。













3.棧(Stack)




Java線程執(zhí)行方法的內(nèi)存模型,一個(gè)線程對(duì)應(yīng)一個(gè)棧,每個(gè)方法在執(zhí)行的同時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(用于存儲(chǔ)局部變量




表,操作數(shù)棧,動(dòng)態(tài)鏈接,方法出口等信息)不存在垃圾回收問(wèn)題,只要線程一結(jié)束該棧就釋放,生命周期和線程一









4.本地方法棧(Native Method Stack)




和棧作用很相似,區(qū)別不過(guò)是Java棧為JVM執(zhí)行Java方法服務(wù),而本地方法棧為JVM執(zhí)行native方法服務(wù)。登記native




方法,在Execution Engine執(zhí)行時(shí)加載本地方法庫(kù)5.程序計(jì)數(shù)器(Program Counter Register)




就是一個(gè)指針,指向方法區(qū)中的方法字節(jié)碼(用來(lái)存儲(chǔ)指向嚇一跳指令的地址,也即將要執(zhí)行的指令代碼),由執(zhí)行




引擎讀取下一條指令,是一個(gè)非常小的內(nèi)存空間,幾乎可以忽略不計(jì)




JDK性能調(diào)優(yōu)監(jiān)控工具Jinfo




查看正在運(yùn)行的Java程序的擴(kuò)展參數(shù)




查看JVM的參數(shù)













查看java系統(tǒng)屬性




等同于System.getProperties()







Jstatjstat命令可以查看堆內(nèi)存各部分的使用量,以及加載類(lèi)的數(shù)量。命令格式:




jstat [-命令選項(xiàng)] [vmid] [間隔時(shí)間/毫秒] [查詢(xún)次數(shù)]




Jmap




可以用來(lái)查看內(nèi)存信息




堆的對(duì)象統(tǒng)計(jì)

如圖:

Num:序號(hào)Instances:實(shí)例數(shù)量Bytes:占用空間大小Class Name:類(lèi)名堆信息

堆內(nèi)存dump







jmap -dump:format=b,file=temp.hprof




也可以在設(shè)置內(nèi)存溢出的時(shí)候自動(dòng)導(dǎo)出dump文件(項(xiàng)目?jī)?nèi)存很大的時(shí)候,可能會(huì)導(dǎo)不出來(lái))




1.-XX:+HeapDumpOnOutOfMemoryError




2.-XX:HeapDumpPath=輸出路徑







可以使用jvisualvm命令工具導(dǎo)入文件分析







Jstack




jstack用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照。

由于篇幅有限,此文檔內(nèi)容實(shí)在太多了,只能展示一部分出來(lái)分享給大家,但是通過(guò)短暫的文章可以了解到此文檔可以學(xué)習(xí)到很多JVM相關(guān)的知識(shí)點(diǎn)與工作中的技巧,需要獲取這份《深入理解Java虛擬機(jī)》實(shí)戰(zhàn)文檔的朋友們可以關(guān)注一下小編,后續(xù)會(huì)繼續(xù)更新的,整理不易,還請(qǐng)大家多多轉(zhuǎn)發(fā),你們的轉(zhuǎn)發(fā)是我分享道路上最大的動(dòng)力,感謝大家!













本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!

關(guān)鍵詞:虛擬,技術(shù)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉