java内存四大区,jvm基础-内存区域
1.運(yùn)行時(shí)數(shù)據(jù)區(qū)
java虛擬機(jī)在執(zhí)行java程序的過程中會(huì)爸它所管理的內(nèi)存分為若干個(gè)不同的數(shù)據(jù)區(qū)域
jvm內(nèi)存主要分為堆、程序計(jì)數(shù)器、方法區(qū)、虛擬機(jī)棧喝本地方法棧,直接內(nèi)存等。
java方法的運(yùn)行和虛擬機(jī)棧
虛擬機(jī)棧是線程運(yùn)行java方法所需要的數(shù)據(jù),指令,返回地址。
每一個(gè)方法執(zhí)行都會(huì)打包成一個(gè)棧幀。
棧是先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)。
棧幀四個(gè)區(qū)域
局部變量表:
操作數(shù)據(jù)棧
動(dòng)態(tài)連接
返回地址
程序計(jì)數(shù)器
較小的內(nèi)存空間,當(dāng)前線程執(zhí)行的字節(jié)碼的行號指示器,各線程之間獨(dú)立存儲(chǔ),互不影響。
由于java是多線程語言,當(dāng)執(zhí)行線程數(shù)量超過cpu的核心數(shù),線程之間會(huì)根據(jù)時(shí)間片輪詢cpu資源。那么退出的線程就需要一個(gè)單獨(dú)的計(jì)數(shù)器去記錄下一條運(yùn)行的指令。它也是為一個(gè)不會(huì)oom的內(nèi)存區(qū)域。所有的方法都有程序計(jì)數(shù)器(native 本地方法除外)
本地方法棧
本地方法棧跟java虛擬機(jī)棧的功能類似
方法區(qū)
提供各個(gè)線程共享的運(yùn)行時(shí)內(nèi)存區(qū)域。它存儲(chǔ)每一個(gè)類的結(jié)構(gòu)信息,例如 運(yùn)行時(shí)常量池字段和方法數(shù)據(jù),構(gòu)造函數(shù)和普通方法的字節(jié)碼內(nèi)容,類、實(shí)例、接口初始化的特殊方法、jdk 1.7 永久代 1.8元空間
運(yùn)行時(shí)常量池
每一個(gè)類,接口的常量池的運(yùn)行時(shí)表現(xiàn)形式,包括若干不同的常量,必須在運(yùn)行期解析后才能獲得方法或者字段的引用。
堆
是jvm內(nèi)存區(qū)域中最大的一塊,申請的所有對象都在堆。垃圾回收也就是回收堆。
直接內(nèi)存
jvm在運(yùn)行的時(shí)候,會(huì)從系統(tǒng)中申請大塊的堆內(nèi)存。
jvm運(yùn)行的總體流程
jvm在操作系統(tǒng)上啟動(dòng)申請內(nèi)存,先進(jìn)行運(yùn)行時(shí)數(shù)據(jù)區(qū)的初始化,然后把類加載到方法區(qū),最后執(zhí)行方法。方法的執(zhí)行和退出過程在內(nèi)存的提現(xiàn)上是虛擬機(jī)棧中棧幀的入棧和出棧。同時(shí)在方法的執(zhí)行過程中創(chuàng)建的對象一般情況下是放在堆中,最后堆中的對象也是需要進(jìn)行GC。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java内存四大区,jvm基础-内存区域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 实现自动加载更多,$.ajax+
- 下一篇: php smarty 序号,php –