国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

JVM字符串常量池同運(yùn)行時(shí)常量池關(guān)系理解

shinezejian / 3398人閱讀

摘要:看深入理解虛擬機(jī)時(shí)了解到方法區(qū)中存在運(yùn)行時(shí)常量池,運(yùn)行時(shí)常量池會(huì)在類(lèi)加載時(shí)載入文件中的常量池信息。字符串和在常量池表中的,理應(yīng)應(yīng)該進(jìn)入運(yùn)行時(shí)常量池。以上是我一直以來(lái)的疑惑,字符串常量池和運(yùn)行時(shí)常量池到底是什么關(guān)系查了很多資料都是沒(méi)有說(shuō)到。

看《深入理解java虛擬機(jī)》時(shí)了解到方法區(qū)中存在運(yùn)行時(shí)常量池(Runtime Constant Pool),運(yùn)行時(shí)常量池會(huì)在類(lèi)加載時(shí)載入class文件中的常量池信息(constant_pool table)。

public class Test{
    public static String a = "a";
    public static void main(){
        String b = "b";
    }
}

字符串“a”和“b”在常量池表中的,理應(yīng)應(yīng)該進(jìn)入運(yùn)行時(shí)常量池。運(yùn)行時(shí)常量池(絕大部分)是隨著JVM運(yùn)行時(shí)候,從常量池轉(zhuǎn)化而來(lái),每個(gè)Class對(duì)應(yīng)一個(gè)運(yùn)行時(shí)常量池。那么a,b不應(yīng)該在每一個(gè)class類(lèi)對(duì)應(yīng)的運(yùn)行時(shí)常量池內(nèi)么?下面是試驗(yàn)代碼

public class A
{
    static String a = "hello";
    static String b = "你好";
    public String c = "hello";
    public String d = "你好";
}

public class B {
    static String a = "hello";
    static String b = "你好";
    String c = "hello";
    String d = "你好";
}
public class Test {

    @org.junit.Test
    public void test(){
        System.out.println(A.a == B.a);
        System.out.println(A.b == B.b);

        A a = new A();
        B b = new B();
        System.out.println(a.c == b.c);
        System.out.println(a.d == b.d);
        System.out.println(A.a == a.c);
        System.out.println(A.b == a.d);
        String c = new String("hello");
        System.out.println(c == A.a);
        System.out.println(c.intern() == A.a);
    }
}

實(shí)驗(yàn)結(jié)果(JDK8)

true
true
true
true
true
true
false
true

說(shuō)明字符串“a”和“b”都是一塊內(nèi)存地址。關(guān)于常量池還有一個(gè)概念就是字符串常量池(String Pool)。String Pool是JVM實(shí)例全局共享的,全局只有一個(gè)。所以“a”和“b”這兩個(gè)字符串應(yīng)該是在字符串常量池內(nèi),全局共享。

以上是我一直以來(lái)的疑惑,字符串常量池和運(yùn)行時(shí)常量池到底是什么關(guān)系?查了很多資料都是沒(méi)有說(shuō)到。運(yùn)行時(shí)常量池是在方法區(qū)內(nèi),同時(shí)《深入理解java虛擬機(jī)》說(shuō)到

在目前已經(jīng)發(fā)布的JDK1.7的HotSpot中,已經(jīng)把原本放在永久帶的字符串常量池移除

所以個(gè)人覺(jué)得字符串常量池應(yīng)該是在堆中表示常量的常量池,而運(yùn)行時(shí)常量池是在方法區(qū)中。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69400.html

相關(guān)文章

  • 方法區(qū)到底是個(gè)什么鬼

    摘要:那方法區(qū)里都存著什么呢先拋結(jié)論靜態(tài)變量常量類(lèi)信息構(gòu)造方法接口定義運(yùn)行時(shí)常量池存在方法區(qū)中。動(dòng)態(tài)常量池運(yùn)行時(shí)常量池是方法區(qū)的一部分,是一塊內(nèi)存區(qū)域。文件常量池將在類(lèi)加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池中存放。 一、方法區(qū)與永久代 這兩個(gè)是非常容易混淆的概念,永久代的對(duì)象放在方法區(qū)中,就會(huì)想當(dāng)然地認(rèn)為,方法區(qū)就等同于持久代的內(nèi)存區(qū)域。事實(shí)上兩者是這樣的關(guān)系: 《Java虛擬機(jī)規(guī)范》只是規(guī)定了有方...

    binaryTree 評(píng)論0 收藏0
  • 我終于搞清楚了和String有關(guān)的那點(diǎn)事兒。

    摘要:為了減少在中創(chuàng)建的字符串的數(shù)量,字符串類(lèi)維護(hù)了一個(gè)字符串常量池。但是當(dāng)執(zhí)行了方法后,將指向字符串常量池中的那個(gè)字符串常量。由于和都是字符串常量池中的字面量的引用,所以。究其原因,是因?yàn)槌A砍匾4娴氖且汛_定的字面量值。 String,是Java中除了基本數(shù)據(jù)類(lèi)型以外,最為重要的一個(gè)類(lèi)型了。很多人會(huì)認(rèn)為他比較簡(jiǎn)單。但是和String有關(guān)的面試題有很多,下面我隨便找兩道面試題,看看你能不能...

    paulli3 評(píng)論0 收藏0
  • JVM(一)內(nèi)存模型

    摘要:作為本系列的第一章就從內(nèi)存模型開(kāi)始說(shuō)起。這這塊內(nèi)存區(qū)域有可能發(fā)生兩種異常。新生代的一塊內(nèi)存空間,它是新小對(duì)象出生的地方,當(dāng)沒(méi)有足夠的空間進(jìn)行分配的時(shí)候,發(fā)生一次。 一、前言 手上的這本《深入理解Java虛擬機(jī)》這本書(shū)買(mǎi)來(lái)已接近2年,期間也是看看停停,現(xiàn)如今也才只看到前10章(來(lái)回倒騰的看)。寫(xiě)這個(gè)專(zhuān)題的目的:1、作一個(gè)專(zhuān)題復(fù)習(xí),老話說(shuō)的好:好記性不如爛筆頭,正好也可以把自己的一些理解記...

    CarterLi 評(píng)論0 收藏0
  • JVM內(nèi)存模型與運(yùn)行時(shí)數(shù)據(jù)區(qū)域

    摘要:內(nèi)存模型和運(yùn)行時(shí)數(shù)據(jù)區(qū)域的關(guān)系主內(nèi)存對(duì)應(yīng)著堆,工作內(nèi)存對(duì)應(yīng)著棧。在的單例模式中有運(yùn)用到二運(yùn)行時(shí)數(shù)據(jù)區(qū)域內(nèi)存區(qū)域因?yàn)榈倪\(yùn)行時(shí)數(shù)據(jù)區(qū)域一直在改善,所以不同版本之間會(huì)有不同。 一、java內(nèi)存模型 showImg(https://segmentfault.com/img/remote/1460000016694250?w=1810&h=941); java定義內(nèi)存模型的目的是:為了屏蔽各種...

    canopus4u 評(píng)論0 收藏0
  • 在Java虛擬機(jī)中,符串常量到底存放在哪

    摘要:的三種常量池此外,有三種常量池,即字符串常量池又叫全局字符串池文件常量池運(yùn)行時(shí)常量池。開(kāi)始虛擬機(jī)把字符串常量池位置從永久代挪到堆,又徹底取消,把諸如之類(lèi)的元數(shù)據(jù)都挪到堆之外管理。 前言 前陣子和朋友討論一個(gè)問(wèn)題: 字符串常量歸常量池管理,那比如 String str = abc; abc這個(gè)對(duì)象是放在內(nèi)存中的哪個(gè)位置,是字符串常量池中還是堆? 這句代碼的abc當(dāng)然在常量池中,只有n...

    lewinlee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<