虛擬機內存模型

一、虛擬內存模型

注:圖中紅色部分爲線程共享,白色部分爲線程私有

二、Java虛擬機棧

作用域:線程私有,生命週期同線程是一樣的

存儲數據:每個方法執行時會首先創建棧幀,存儲局部變量表、操作數棧、動態鏈接和方法出口等信息。

其中局部變量表存儲了基礎數據類型(int、boolean、char、byte、long、short、float、double)和對象引用

異常類型:請求棧深度超過虛擬機允許的棧深度---StackOverflowError;動態擴展棧內存時,無法申請到足

夠內存-----OutOfMemoryError

三、本地方法棧

作用域:執行的是本地Native方法所需要保存的信息,線程私有的區域

異常類型:同虛擬機棧一樣,也會拋出StackOverflowError和OutOfMemoryError異常類型

四、Java堆

作用域:線程共享區域,存放這幾乎所有的創建的對象實例,垃圾回收的主要區域

存儲數據:所有對象創建的實例

異常類型:創建實例沒有內存分配---OutOfMemoryError

五、方法區

作用域:線程共享區域

存儲數據:被虛擬機加載的類信息、常量、靜態變量和編譯後的代碼等數據

異常類型:內存不夠時----OutOfMemoryError

5.1、常量池

作用域:方法區的一部分,所以是線程共享

存儲數據:Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息是常量池

(Constant Pool Table),用於存放編譯期生成的各種字面量和符號引用

異常類型:OutOfMemoryError

六、直接內存

作用域:不是虛擬機運行的一部分

存儲數據:可以作爲一個輔助內存來使用,如NIO,可以將直接內存作爲緩衝區來使用,可提高系統的效率。

異常類型:OutOfMemoryError

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章