java編譯時的常量池
Ⅰ java中 關於常量池 棧內存 堆內存
java中空間分為3個,串池、堆、棧、其中串池是放字元串的,比如「1234」,堆是放對象的。棧是放變數的。
Ⅱ Java運行時常量池是什麼
運行時常量池是每個類常量池的運行時代表。它包含了類的運行時常量和靜態方法。運行時常量池是方法區的一部分。
Ⅲ java常量池是什麼
常量池(constant pool)指的是在編譯期被確定,並被保存在已編譯的.class文件中的一些數據。它包括了關於類、方法、介面等中的常量,也包括字元串常量。
Ⅳ Jave運行時常量池是什麼意思
運行時常量池是方法區的一部分,Class文件中除了有類的版本,欄位,方法,介面等信息以外,還有一項信息是常量池用於存儲編譯器生成的各種字面量和符號引用,這部分信息將在類載入後存放到方法區的運行時常量池中。Java虛擬機對類的每一部分(包括常量池)都有嚴格的規定,每個位元組用於存儲哪種數據都必須有規范上的要求,這樣才能夠被虛擬機認可,裝載和執行。一般來說,除了保存Class文件中描述的符號引用外,還會把翻譯出來的直接引用也存儲在運行時常量池中。
Ⅳ java 常量池
存在棧中
是的
是的
JVM內部處理步驟
生命變數 int a
在常量池裡查找是否有 值為「0」的地址,如果沒有開辟一個地址,並將變數a指向這個地址
Ⅵ Java 中的 常量共享池 什麼意思
一直有個疑問,java中字元串池,String池,共享池是怎麼回事?
好像知道什麼意思,但具體又不太清楚,所以也一直沒太關注。
從網上看了些資料,解釋了下疑問。
在java的棧中,有共享池的概念,把一些常量會放到這個共享池中,包括字元串常量和基本類型常量。
共享的操作時在編譯時 由編譯器完成的,可以節省內存,並提高效率。
例如語句string str = "hello", 首先在棧中創建字元串引用變數str, 再看看棧中有沒有「hello」,如果有就str直接指向它,沒有就創建「hello」並放在棧中,然後指向它。
對於int之類的基本類型的變數也差不多都是這樣的。
而對於 String str = new String("hello"),則是創建新的對象,並放在堆內存中。是在runtime的時候分配內存的。
這樣做效率和節省內存方面不如String str = 「hello」, 但是更靈活,如果編譯時不知道要創建什麼樣的字元串,就
只能運行時創建了。
Ⅶ java方法區中包含哪些內容,常量池中包含哪些內容
包含類的版本,類名,欄位,方法,介面等信息;
常量池裡存放了編譯期產生的各種 字面量以及符號引用,在類載入後進入方法區的運行時常量池中,運行時常量池相對於class常量池一個重要的特徵是動態性,在運行期間也可以將新的常量放入其中,用的較多的就是String的intern方法。
Ⅷ java中編譯期常量所指的是什麼
classInitalizedClass{
static{
System.out.println("!");
}
publicstaticintinititalize_varible=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.inititalize_varible);
}
}上面的結果是:
!
1
classInitalizedClass{
static{
System.out.println("!");
}
//和上面的例子唯一的差異就是此處的變數INITIALIZED_VARIBLE被聲明為final
_VARIBLE=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.INITIALIZED_VARIBLE);
}
}
上面的結果是:
1
為什麼兩個例子執行結果不一樣,原因是第二個例子中的INITIALIZED_VARIBLE為編譯期常量,它不會導致類的初始化的
