這篇文章主要講解了“java JVM內(nèi)存區(qū)域的知識點有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java JVM內(nèi)存區(qū)域的知識點有哪些”吧!
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供復(fù)興網(wǎng)站建設(shè)、復(fù)興做網(wǎng)站、復(fù)興網(wǎng)站設(shè)計、復(fù)興網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、復(fù)興企業(yè)網(wǎng)站模板建站服務(wù),十年復(fù)興做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
程序計數(shù)器
1.每個線程都有自己獨立的程序計數(shù)器
2.線程執(zhí)行的是非native方法,則程序計數(shù)器中保存的是當(dāng)前需要執(zhí)行的指令的地址;執(zhí)行native方法是,值是undefined
3.程序計數(shù)器大小不會隨著程序執(zhí)行而變化,故不會發(fā)生OOM(OutOfMemory)
Java虛擬機(jī)棧
1.是線程私有的;
2.存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口;
3.局部變量表存放基本數(shù)據(jù)類型(不是對象,是int,short,boolean等8種,其中l(wèi)ong和double占用兩個變量空間)和對象引用;
4.線程請求的棧深度大于虛擬機(jī)允許的深度時,發(fā)生StackOverflowError異常;如果虛擬機(jī)棧動態(tài)擴(kuò)展時,無法申請足夠的內(nèi)存則OutOfMemoryError。
本地方法棧
1.本地方法棧對虛擬機(jī)使用到的Native方法服務(wù);
2.也會拋出StackOverflowError和OutOfMemoryError。
Java堆
1.在Java虛擬機(jī)啟動時產(chǎn)生,是所有線程共享;
2.可再細(xì)分,如從內(nèi)存回收角度來看,可再分為新生代、老年代、Eden空間、From Survivor空間、To Survivor空間;如從內(nèi)存分配角度看,可再分為多個線程私有的分配緩沖區(qū);
3.Java堆可以在物理上不連續(xù),邏輯上連續(xù)即可;
4.如果堆中沒有內(nèi)存完成實例分配,并且堆的總大小也無法再擴(kuò)展時,拋出OutOfMemoryError。
方法區(qū)
1.是各個線程共享的內(nèi)存區(qū)域;
2.用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù);
3.當(dāng)方法區(qū)無法滿足內(nèi)存分配需求時,將拋出OutOfMemoryError。
運(yùn)行時常量池
1.運(yùn)行時常量池是方法區(qū)的一部分;
2.存放Class文件中的常量信息、還會把翻譯出來的直接引用也存儲在這里;
3.常量池?zé)o法再申請到內(nèi)存時拋出OutOfMemoryError。
直接內(nèi)存
1.不是Java虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)的一部分,是Java程序通過Native函數(shù)直接申請機(jī)器的內(nèi)存;
2.當(dāng)內(nèi)存不夠時拋出OutOfMemoryError。
感謝各位的閱讀,以上就是“java JVM內(nèi)存區(qū)域的知識點有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對java JVM內(nèi)存區(qū)域的知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!