强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁 > 廠商 > 知識 > 常量池,Jave運行時常量池是什么意思

常量池,Jave運行時常量池是什么意思

來源:整理 時間:2023-08-20 01:27:02 編輯:智能門戶 手機版

本文目錄一覽

1,Jave運行時常量池是什么意思

運行時常量池是方法區(qū)的一部分,Class文件中除了有類的版本,字段,方法,接口等信息以外,還有一項信息是常量池用于存儲編譯器生成的各種字面量和符號引用,這部分信息將在類加載后存放到方法區(qū)的運行時常量池中。Java虛擬機對類的每一部分(包括常量池)都有嚴格的規(guī)定,每個字節(jié)用于存儲哪種數(shù)據(jù)都必須有規(guī)范上的要求,這樣才能夠被虛擬機認可,裝載和執(zhí)行。一般來說,除了保存Class文件中描述的符號引用外,還會把翻譯出來的直接引用也存儲在運行時常量池中。

Jave運行時常量池是什么意思

2,java常量池中存放什么8種基本類型和String還有其他的嗎

常量池是介于棧和堆外的另一種獨立的內(nèi)存管理空間,相同內(nèi)容常量池中永遠只有一份,基本數(shù)據(jù)類型、對象的引用都存在棧中,執(zhí)行速度快,包裝類型,對象存儲,new出來的對象都是存儲在堆中,Byte,Short,Integer,Long,Character這5種整型的包裝類只是在對應值小于等于127時才可使用對象池。超過了就會自動申請空間創(chuàng)建對象,所有才會出現(xiàn)上述情況,而String是個較為特殊的包裝類型,直接用=“”創(chuàng)建的數(shù)據(jù)是存放在常量池,且無論數(shù)據(jù)大小都不會申請空間創(chuàng)建,除非使用new關(guān)鍵字。

java常量池中存放什么8種基本類型和String還有其他的嗎

3,Java虛擬機幾種常量池區(qū)分

jvm在執(zhí)行某個類的時候,必須經(jīng)過加載、連接、初始化,而連接又包括驗證、準備、解析三個階段。而當類加載到內(nèi)存中后,jvm就會將class常量池中的內(nèi)容存放到運行時常量池中,由此可知,運行時常量池也是每個類都有一個。在上面我也說了,class常量池中存的是字面量和符號引用,也就是說他們存的并不是對象的實例,而是對象的符號引用值。而經(jīng)過解析(resolve)之后,也就是把符號引用替換為直接引用,解析的過程會去查詢?nèi)肿址?,也就是我們上面所說的StringTable,以保證運行時常量池所引用的字符串與全局字符串池中所引用的是一致的。

Java虛擬機幾種常量池區(qū)分

4,JVM中常量池存放在哪里

java8之前: java8之后:元數(shù)據(jù)區(qū) Metaspace 由于 PermGen 內(nèi)存管理的效果遠沒有達到預期,所以JCP已經(jīng)著手去除PermGen的工作。在JDK7中,字符串常量已經(jīng)從永久代移除?,F(xiàn)今 JDK8 中 PermGen 已經(jīng)被徹底移除,取而代之的是metaspace數(shù)據(jù)區(qū),使用native內(nèi)存,申請和釋放由虛擬機負責管理。 那么,JVM中常量池到底存放在哪里? Java6和6之前,常量池是存放在方法區(qū)(永久代)中的。 Java7,將常量池是存放到了堆中。 Java8之后,取消了整個永久代區(qū)域,取而代之的是元空間。 運行時常量池和靜態(tài)常量池存放在元空間中,而字符串常量池依然存放在堆中。

5,Java String常量池在什么位置

常量池中基本數(shù)據(jù)類型一般在棧中
常量池只有一個。string a = "abc"http://現(xiàn)在常量池里找abc,有的話就把a指向它,沒有的話就新建 這是在編譯期間做的string b = new string("abc");//直接新建一個abc,并把地址給b,這是在運行期間做的a == b //判斷a和b的地址是否相等,明顯不相等。a.equals(b)//判斷a和b指向的字符串常量是否相等,都是"abc",所以是true
需要看你的JVM的版本,不同的JVM版本常量池的位置是不同的!jdk1,6常量池放在方法區(qū)jdk1.7常量池放在堆內(nèi)存jdk1.8放在元空間里面,和堆相獨立
JVM > 方法區(qū) > 常量池

6,Java常量池是什么有什么用 和堆棧有關(guān)系求簡單易懂的解釋百度知

1.寄存器:最快的存儲區(qū), 由編譯器根據(jù)需求進行分配,我們在程序中無法控制.  2. 棧:存放基本類型的變量數(shù)據(jù)和對象的引用,但對象本身不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字符串常量對象存放在常量池中。)  3. 堆:存放所有new出來的對象?! ?. 靜態(tài)域:存放靜態(tài)成員(static定義的)  5. 常量池:存放字符串常量和基本類型常量(public static final)。  6. 非RAM存儲:硬盤等永久存儲空間  這里我們主要關(guān)心棧,堆和常量池,對于棧和常量池中的對象可以共享,對于堆中的對象不可以共享。棧中的數(shù)據(jù)大小和生命周期是可以確定的,當沒有引用指向數(shù)據(jù)時,這個數(shù)據(jù)就會消失。堆中的對象的由垃圾回收器負責回收,因此大小和生命周期不需要確定,具有很大的靈活性。  對于字符串:其對象的引用都是存儲在棧中的,如果是編譯期已經(jīng)創(chuàng)建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的就存儲在堆中。對于equals相等的字符串,在常量池中永遠只有一份,在堆中有多份。

7,java常量池是什么

int a = 1;1會存放在棧里 String s1 = "thanks";thanks會存放在data segment里 String s2 = new String("thanks");thanks會存放在data segment里 String a ="th";String b = "anks";String c =a+b;c會存放在data segment里 字符串全部存放在data segment里 常量池全部在棧里。如果你不new的話,比如你寫String s = "thanks";這時s分配在棧里,s直接指向字符池里的"thanks";但如果你這樣寫,String s; s = new String("thanks");這時s指向堆里的一塊內(nèi)存,這個內(nèi)存里的地址指向字符池里的"thanks";怎么樣,樓主這下明白了吧!

8,Java運行時常量池是什么

在class文件中,“常量池”是最復雜也最值得關(guān)注的內(nèi)容。  Java是一種動態(tài)連接的語言,常量池的作用非常重要,常量池中除了包含代碼中所定義的各種基本類型(如int、long等等)和對象型(如String及數(shù)組)的常量值還,還包含一些以文本形式出現(xiàn)的符號引用,比如:  類和接口的全限定名;  字段的名稱和描述符;  方法和名稱和描述符?! ≡贑語言中,如果一個程序要調(diào)用其它庫中的函數(shù),在連接時,該函數(shù)在庫中的位置(即相對于庫文件開頭的偏移量)會被寫在程序中,在運行時,直接去這個地址調(diào)用函數(shù);  而在Java語言中不是這樣,一切都是動態(tài)的。編譯時,如果發(fā)現(xiàn)對其它類方法的調(diào)用或者對其它類字段的引用的話,記錄進class文件中的,只能是一個文本形式的符號引用,在連接過程中,虛擬機根據(jù)這個文本信息去查找對應的方法或字段?! ∷裕cJava語言中的所謂“常量”不同,class文件中的“常量”內(nèi)容很非富,這些常量集中在class中的一個區(qū)域存放,一個緊接著一個,這里就稱為“常量池”。java中的常量池技術(shù),是為了方便快捷地創(chuàng)建某些對象而出現(xiàn)的,當需要一個對象時,就可以從池中取一個出來(如果池中沒有則創(chuàng)建一個),則在需要重復重復創(chuàng)建相等變量時節(jié)省了很多時間。常量池其實也就是一個內(nèi)存空間,不同于使用new關(guān)鍵字創(chuàng)建的對象所在的堆空間。本文只從java使用者的角度來探討java常量池技術(shù),并不涉及常量池的原理及實現(xiàn)方法。個人認為,如果是真的專注java,就必須對這些細節(jié)方面有一定的了解。但知道它的原理和具體的實現(xiàn)方法則不是必須的。常量池中對象和堆中的對象[java] view plain copypublic class Test Integer i1=new Integer(1); Integer i2=new Integer(1); //i1,i2分別位于堆中不同的內(nèi)存空間 System.out.println(i1==i2);//輸出false Integer i3=1; Integer i4=1; //i3,i4指向常量池中同一個內(nèi)存空間 System.out.println(i3==i4);//輸出true //很顯然,i1,i3位于不同的內(nèi)存空間 System.out.println(i1==i3);//輸出false } 8種基本類型的包裝類和對象池java中基本類型的包裝類的大部分都實現(xiàn)了常量池技術(shù),這些類是Byte,Short,Integer,Long,Character,Boolean,另外兩種浮點數(shù)類型的包裝類則沒有實現(xiàn)。另外Byte,Short,Integer,Long,Character這5種整型的包裝類也只是在對應值小于等于127時才可使用對象池,也即對象不負責創(chuàng)建和管理大于127的這些類的對象。以下是一些對應的測試代碼:[java] view plain copypublic class Test public static void main(String[] args) //5種整形的包裝類Byte,Short,Integer,Long,Character的對象, //在值小于127時可以使用常量池 Integer i1=127; Integer i2=127; System.out.println(i1==i2)//輸出true //值大于127時,不會從常量池中取對象 Integer i3=128; Integer i4=128; System.out.println(i3==i4)//輸出false //Boolean類也實現(xiàn)了常量池技術(shù) Boolean bool1=true; Boolean bool2=true; System.out.println(bool1==bool2);//輸出true //浮點類型的包裝類沒有實現(xiàn)常量池技術(shù) Double d1=1.0; Double d2=1.0; System.out.println(d1==d2)//輸出false } } String也實現(xiàn)了常量池技術(shù)String類也是java中用得多的類,同樣為了創(chuàng)建String對象的方便,也實現(xiàn)了常量池的技術(shù),測試代碼如下:[java] view plain copypublic class Test public static void main(String[] args) //s1,s2分別位于堆中不同空間 String s1=new String("hello"); String s2=new String("hello"); System.out.println(s1==s2)//輸出false //s3,s4位于池中同一空間 String s3="hello"; String s4="hello"; System.out.println(s3==s4);//輸出true } } 最后細節(jié)決定成敗,寫代碼更是如此。在JDK5.0之前是不允許直接將基本數(shù)據(jù)類型的數(shù)據(jù)直接賦值給其對應地包裝類的,如:Integer i = 5; 但是在JDK5.0中支持這種寫法,因為編譯器會自動將上面的代碼轉(zhuǎn)換成如下代碼:Integer i=Integer.valueOf(5); 這就是Java的裝箱.JDK5.0也提供了自動拆箱. Integer i =5; int j = i; Integer的封裝:[java] view plain copypublic static Integer valueOf(int i) final int offset = 128; if (i >= -128 && i <= 127) return IntegerCache.cache[i + offset]; } return new Integer(i); } private static class IntegerCache private IntegerCache()static final Integer cache[] = new Integer[-(-128) + 127 + 1]; static for(int i = 0; i < cache.length; i++) cache[i] = new Integer(i - 128); } } 由于cache[]在IntegerCache類中是靜態(tài)數(shù)組,也就是只需要初始化一次,即static{......}部分,所以,如果Integer對象初始化時是-128~127的范圍,就不需要再重新定義申請空間,都是同一個對象---在IntegerCache.cache中,這樣可以在一定程度上提高效率。

9,堆棧常量池

全局對象被放在堆,局部對象放在棧,靜態(tài)對象和方法放在方法區(qū)。你光給這些變量的聲明和賦值語句沒有用啊。比如class ABC和class ABC還有class ABC 放的位置都是完全不一樣的。
int a = 1;1會存放在棧里 string s1 = "thanks";thanks會存放在data segment里 string s2 = new string("thanks");thanks會存放在data segment里 string a ="th";string b = "anks";string c =a+b;c會存放在data segment里 字符串全部存放在data segment里 常量池全部在棧里。如果你不new的話,比如你寫string s = "thanks";這時s分配在棧里,s直接指向字符池里的"thanks";但如果你這樣寫,string s; s = new string("thanks");這時s指向堆里的一塊內(nèi)存,這個內(nèi)存里的地址指向字符池里的"thanks";怎么樣,樓主這下明白了吧!

10,什么是字符串常量池

可以理解為內(nèi)存里面專門為string類型變量開辟的一片區(qū)域譬如String a = "abc"; 當你定義這樣一個變量的時候,java此時先會去常量池尋找有沒有"abc"這樣的字符串,如果有,直接把內(nèi)存地址交給a, 否則就生成一個"abc"的字符串當下一個String b = "abc";的時候,發(fā)現(xiàn)常量池已經(jīng)有"abc"了,此時JVM不會再次生成"abc",而是直接交給"abc"引用給b, 所以此時你會發(fā)現(xiàn)a == b
字符串常量是由一對單撇號括起來的單個字符.c語言允許使用字符常量外,還允許使用字符串常量。字符串常量是一對雙撇號括起來的字符序列。例如下面的是合法的字符串常量:"howdoyoudo.","china","a","$123.45"可以輸出筱字符串,例如:printf("howdoyoudo.");不能將字符串與字符常量混淆。不能把一個字符串常量賦給一個常量變量。這樣的,你就可以選擇了吧。再給你補充一個別的知識點吧,在c語言中沒有專門的字符串變量,如果想將一個字符串存放在變量中以便保存,必須使用字符數(shù)組,即用一個字符型數(shù)組來存放一個字符串,數(shù)組中每一個元素存放一個字符。希望這個對你學習有幫助,以后關(guān)于c語言的任何問題都可以來問我噢。包括以后的指針數(shù)組函數(shù)的內(nèi)容噢好好的學習噢。加油噢加油噢。
文章TAG:常量運行運行時時常常量池

最近更新

  • 四維智聯(lián),最近四維智聯(lián)車挺火的有什么推薦嗎四維智聯(lián),最近四維智聯(lián)車挺火的有什么推薦嗎

    最近四維智聯(lián)車挺火的有什么推薦嗎2,目前有什么比較靠譜的智能車機推薦一下3,愛馳汽車為什么要投資四維智聯(lián)4,車悅寶是最近有活動嗎5,抖8音樂星球車機和四維智聯(lián)有什么關(guān)系6,無人駕駛概念股.....

    知識 日期:2023-08-20

  • 回環(huán),回環(huán)的意思回環(huán),回環(huán)的意思

    回環(huán)的意思2,回環(huán)的意思3,回環(huán)的意思是什么4,寫作方法回環(huán)是什么5,回環(huán)怎么練6,回環(huán)huhun什么意思近義詞和反義詞是什么英文翻譯是什么7,回環(huán)怎么練啊8,什么是回環(huán)的修辭手法與語句例子9,寫作.....

    知識 日期:2023-08-20

  • 機械硬盤數(shù)據(jù)恢復原理,根據(jù)硬盤的數(shù)據(jù)恢復原理,能保障每個扇區(qū)機械硬盤數(shù)據(jù)恢復原理,根據(jù)硬盤的數(shù)據(jù)恢復原理,能保障每個扇區(qū)

    實硬盤數(shù)據(jù)能不能丟恢復實硬盤是恢復-4/,就看你的硬盤是軟故障還是硬故障了(硬盤壞了右鍵單擊計算機管理磁盤管理If。1、存孩子照片,機械硬盤、固態(tài)硬盤、u盤哪個好?哪個使用壽命更長些.....

    知識 日期:2023-08-20

  • 煲機是什么意思,什么是煲機 煲機是什么意思煲機是什么意思,什么是煲機 煲機是什么意思

    什么是煲機煲機是什么意思2,什么是煲機什么是老化3,煲機是啥意思4,煲機是什么意思5,好一點的耳機比如頭戴式得剛買回來都要煲機請問哦煲機是什么6,專業(yè)發(fā)燒音響什么叫煲機1,什么是煲機煲機是.....

    知識 日期:2023-08-20

  • 索菲亞機器人是誰發(fā)明的索菲亞機器人是誰發(fā)明的

    機器人索菲亞是什么機器人索菲亞是歷史上第一個獲得公民身份的智力機器人,索菲亞。-1索菲亞威脅要“毀滅人類”,其實最近兩年出現(xiàn)了很多機器人人類,當然,索菲亞是領(lǐng)域內(nèi)的經(jīng)典,-1索菲亞威脅.....

    知識 日期:2023-08-20

  • 概念手機,十大概念手機概念手機,十大概念手機

    十大概念手機2,諾基亞那款跟葉子一樣的概念機什么時候上市3,什么叫概念機手機4,什么是新概念手機5,水晶版iPhone諾基亞公布概念手機Eco6,什么是概念手機1,十大概念手機http://comm.ccidnet.c.....

    知識 日期:2023-08-20

  • 第一人稱機器人戰(zhàn),機器人角斗場第一人稱第一人稱機器人戰(zhàn),機器人角斗場第一人稱

    Super機器人WarX沈龍丸有8種形態(tài)。超級機器人世界大戰(zhàn)X沈龍丸有八種形態(tài),分別是:1,沈龍丸:最基本的形態(tài)是英雄的身體,可以發(fā)動龍牙神,2.絕地求生:這是一款流行的多人在線游戲,最近也推出了.....

    知識 日期:2023-08-20

  • 菲關(guān)系型數(shù)據(jù)庫,什么時候用非關(guān)系型數(shù)據(jù)庫菲關(guān)系型數(shù)據(jù)庫,什么時候用非關(guān)系型數(shù)據(jù)庫

    即非關(guān)系型數(shù)據(jù)庫,關(guān)系型數(shù)據(jù)庫,非關(guān)系型數(shù)據(jù)庫區(qū)別!用代碼舉個例子!謝謝你。Relational數(shù)據(jù)庫通過外鍵關(guān)聯(lián)建立表之間的關(guān)系,非關(guān)系型數(shù)據(jù)庫通常是指數(shù)據(jù)以對象的形式存儲在數(shù)據(jù)庫中,對象之.....

    知識 日期:2023-08-20