java的常量池
⑴ java中的幾種常量池
字元串常量池:當類載入完成,在堆中生成字元串對象實例,然後將該字元串對象實例的引用值存到string pool中。
class文件常量池:用於存放編譯器生成的各種字面量(Literal)和符號引用(Symbolic References)。
運行時常量池:當類載入到內存中後,jvm就會將class常量池中的內容存放到運行時常量池中。
⑵ Java常量池是什麼有什麼用 和堆、棧有關系求簡單易懂的解釋!
1.寄存器:最快的存儲區, 由編譯器根據需求進行分配,我們在程序中無法控制.
2. 棧:存放基本類型的變數數據和對象的引用,但對象本身不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字元串常量對象存放在常量池中。)
3. 堆:存放所有new出來的對象。
4. 靜態域:存放靜態成員(static定義的)
5. 常量池:存放字元串常量和基本類型常量(public static final)。
6. 非RAM存儲:硬碟等永久存儲空間
這里我們主要關心棧,堆和常量池,對於棧和常量池中的對象可以共享,對於堆中的對象不可以共享。棧中的數據大小和生命周期是可以確定的,當沒有引用指向數據時,這個數據就會消失。堆中的對象的由垃圾回收器負責回收,因此大小和生命周期不需要確定,具有很大的靈活性。
對於字元串:其對象的引用都是存儲在棧中的,如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的就存儲在堆中。對於equals相等的字元串,在常量池中永遠只有一份,在堆中有多份。
⑶ Java運行時常量池是什麼
運行時常量池是每個類常量池的運行時代表。它包含了類的運行時常量和靜態方法。運行時常量池是方法區的一部分。
⑷ java方法區中包含哪些內容,常量池中包含哪些內容
包含類的版本,類名,欄位,方法,介面等信息;
常量池裡存放了編譯期產生的各種 字面量以及符號引用,在類載入後進入方法區的運行時常量池中,運行時常量池相對於class常量池一個重要的特徵是動態性,在運行期間也可以將新的常量放入其中,用的較多的就是String的intern方法。