java內存區域

今天看了java虛擬機這本書中關於內存區域的這個部分,總是希望清晰一些,包括目前還有些疑惑的地方,寫此記錄。


程序計數器:當前線程所執行的字節碼的行號指示器;

虛擬機棧:Java虛擬機棧是線程私有的,生命週期與線程相同。虛擬機棧描述的是java方法執行內存模型:每個方法被執行的時候會創建一個棧幀用於存儲局部變量表、操作數棧,動態鏈接,方法出口等信息;每個方法執行的過程就是一個棧幀在虛擬機中從入棧到出棧的過程;

本地方法棧:虛擬機棧爲虛擬機執行java方法服務;本地方法棧爲虛擬機執行native方法服務;與虛擬機棧作用相似;

:虛擬機啓動時創建,此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這裏分配內存;垃圾收集器主要工作區域,所以也被稱作“GC堆”。

方法區:存儲已被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯後的代碼等數據;
包含“運行時常量池”;運行時常量池:用於存放編譯期生成的各種字面量和符號引用;

直接內存:不是虛擬機運行時數據區的一部分,也不是java虛擬機規範中定義的內存區域;在jdk1.4中加入了NIO(new input/output)類,引入一種基於通道與緩衝區的I/O方式,它可以使用native函數庫直接分配堆外內存,然後通過一個存儲在java堆裏面的DirectByteBuffer對象作爲這塊內存的引用進行操作。爲了避免java堆與native堆來回複製數據;

總結:我們知道了局部變量存放於虛擬機棧中局部變量表,方法執行過程就是棧幀在虛擬機中的入棧與出棧,堆主要乾的事情就是存放對象實例,GC的工作也在這裏,瞭解了直接內存;
就是一個類的成員變量到底如何存儲過程?
網路搜索未找到合理的解答。


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