3 回答

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
答案在技術(shù)上都不是。根據(jù)Java虛擬機(jī)規(guī)范,存儲(chǔ)字符串文字的區(qū)域位于運(yùn)行時(shí)常量池中。運(yùn)行時(shí)常量池內(nèi)存區(qū)域是基于每個(gè)類(lèi)或每個(gè)接口分配的,因此它根本不依賴(lài)于任何對(duì)象實(shí)例。運(yùn)行時(shí)常量池是方法區(qū)域的子集,它“存儲(chǔ)每類(lèi)結(jié)構(gòu),例如運(yùn)行時(shí)常量池,字段和方法數(shù)據(jù),以及方法和構(gòu)造函數(shù)的代碼,包括類(lèi)和實(shí)例初始化和接口中使用的特殊方法類(lèi)型初始化“。VM規(guī)范說(shuō)雖然是方法區(qū)域 它在邏輯上是堆的一部分,它沒(méi)有規(guī)定在方法區(qū)域中分配的內(nèi)存受垃圾收集或與分配給堆的普通數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的其他行為的影響。

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
有趣的是,在Java 7之前,池位于熱點(diǎn)JVM上的堆的permgen空間中,但是自Java 7以來(lái)它已被移動(dòng)到堆的主要部分:
區(qū)域:HotSpot
概要:在JDK 7中,實(shí)現(xiàn)的字符串不再分配在Java堆的永久生成中,而是分配在Java堆的主要部分(稱(chēng)為年輕和老一代),以及另一個(gè)應(yīng)用程序創(chuàng)建的對(duì)象。此更改將導(dǎo)致更多數(shù)據(jù)駐留在主Java堆中,并且永久生成中的數(shù)據(jù)更少,因此可能需要調(diào)整堆大小。由于此更改,大多數(shù)應(yīng)用程序?qū)⒅豢吹蕉咽褂弥械南鄬?duì)較小的差異,但是加載許多類(lèi)或大量使用String.intern()方法的較大應(yīng)用程序?qū)⒖吹礁@著的差異。RFE:6962931
在Java 8 Hotspot中,永久生成已被完全刪除。
添加回答
舉報(bào)