java 常量区存放 new_java常量池与对象存储
一 數據存儲位置
我們先來談談數據的存儲位置,有五個地方可以存儲數據
(1)寄存器:這是最快的存儲區,因為它位于不同于其他存儲區的地方-處理器內部。對于程序員來說是透明的不能直接控制,并且數量有限。
(2)堆棧:位于通用RAM(隨機訪問存儲器)中,通過堆棧指針可以從處理器那里獲得直接支持。堆棧指針若向下移動,則分配新的內存;反之,則釋放那些內存。java的對象引用存儲在堆棧中。
(3)堆:一種溝通用的內存池(也位于RAM區),用于存放所有的java對象。堆不同于堆棧的好處是:編譯器不需要知道存儲的數據在對立面存活多長時間。因此在堆中分配存儲有很大的靈活性。當需要一個對象時,只需要new寫一個簡單的代碼,當執行這個代碼時,會自動在堆里面進行存儲分配。
(4)常量存儲:常量值通常會放到程序代碼內部,這樣做的是安全的的,因為它永遠不會被改變。
(5)非RAM存儲:如果數據完全存活于程序之外,那么他可以不受任何程序的控制,在程序沒有運行時也可以存在。其中最基本的兩個例子就是流對象和持久化對象。
二 java內存區域
上圖為java虛擬機運行時數據區。
(1)程序計數器:線程私有的。可以看成是當前線程所執行字節碼的行號指示器。在虛擬機的概念模型里,通過改變這個程序計數器來選取嚇一跳需要執行的字節碼指令。
(2)java虛擬機棧:線程私有的。虛擬機棧是java方法執行的內存模型:每個方法在執行的同時會創建一個棧幀用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。每一個方法從調用到完成的過程,就對應著一個棧幀在虛擬機棧中入棧到出棧的過程。局部變量表存放了編譯器可預知的各種個基本數據類型、對象引用個指向了一條字節碼指令的地址。
(3)本地方法棧:線程私有的。與虛擬機棧的作用類似,虛擬機棧為java方法提供服務,而本地方法棧則為虛擬機使用到的NATIVE方法服務。
(4)java堆:線程共享的。幾乎所有的java對象實例都在這里分配存儲。java堆是垃圾回收器管理的主要區域。
(5)方法區:線程共享的。用于存儲已被虛擬機加載的類信息、常量、靜態變量、及時編譯器編譯后的代碼等數據。方法區包含運行常量池,CLASS文件除了有類的版本、字段、方法、接口等描述信息外,還有一項信息是常量池,用于存放編譯期生成的各種字面量和符號引用,這部分內容將在類加載后進入方法區運行時常量池中存放。
總結
以上是生活随笔為你收集整理的java 常量区存放 new_java常量池与对象存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 找出list中相同数据_Jav
- 下一篇: java 单个用户的多重并发会话_单个用