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