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