jvm方法區(qū)是在堆里嗎 jvm堆和棧的區(qū)別?
jvm堆和棧的區(qū)別?1. 堆棧:每當(dāng)啟動(dòng)一個(gè)新線程時(shí),Java虛擬機(jī)都會(huì)為它分配一個(gè)Java堆棧。JVM將只在Java堆棧上執(zhí)行兩個(gè)操作:堆棧按下或以堆棧幀為單位退出堆棧。每個(gè)線程都包含一個(gè)堆棧區(qū)域,
jvm堆和棧的區(qū)別?
1. 堆棧:每當(dāng)啟動(dòng)一個(gè)新線程時(shí),Java虛擬機(jī)都會(huì)為它分配一個(gè)Java堆棧。JVM將只在Java堆棧上執(zhí)行兩個(gè)操作:堆棧按下或以堆棧幀為單位退出堆棧。每個(gè)線程都包含一個(gè)堆棧區(qū)域,其中只存儲(chǔ)基本數(shù)據(jù)類型的對(duì)象和自定義對(duì)象(而不是對(duì)象)的引用,對(duì)象存儲(chǔ)在堆棧區(qū)域中。
2. 堆:存儲(chǔ)所有對(duì)象,每個(gè)對(duì)象都包含相應(yīng)的類信息——類的目的是獲取操作指令。JVM中的所有線程只共享一個(gè)堆。堆不存儲(chǔ)基本類型和對(duì)象引用,只存儲(chǔ)對(duì)象本身。
方法區(qū)與永久區(qū)的區(qū)別?
方法區(qū)域是JVM規(guī)范中運(yùn)行時(shí)數(shù)據(jù)區(qū)域的一部分。JVM規(guī)范中的運(yùn)行時(shí)數(shù)據(jù)區(qū)還包括:PC寄存器、虛擬機(jī)堆棧、堆、方法區(qū)、運(yùn)行時(shí)常量池、本地方法堆棧
永久區(qū),也稱為perm區(qū),只存在于jdk8的熱點(diǎn)中,引入了一個(gè)新的內(nèi)存區(qū)Metaspace
方法區(qū)。1每個(gè)類的結(jié)構(gòu)信息和運(yùn)行時(shí)常量池、字段、方法數(shù)據(jù)、常用方法和構(gòu)造方法的字節(jié)碼內(nèi)容是什么。(這是一個(gè)規(guī)范。不同的虛擬機(jī)有不同的實(shí)現(xiàn)。最典型的例子是永久空間和元空間。實(shí)例變量位于堆內(nèi)存中,與方法區(qū)域無(wú)關(guān)。2它絕對(duì)不是用來(lái)放方法的。三。此區(qū)域中的所有線程都是共享的,并且存在垃圾回收。R
年輕一代使用復(fù)制算法。每次執(zhí)行小GC時(shí),伊甸園區(qū)域中幸存的物體都會(huì)被復(fù)制到幸存區(qū)域,幸存的物體會(huì)被移到老年。如果只有一個(gè)幸存者區(qū)域,它將產(chǎn)生垃圾碎片。
讓我們看看只有一個(gè)s區(qū)域的情況
如果有兩個(gè)區(qū)域,一個(gè)是S1,一個(gè)是S2,則將S1和Eden區(qū)域的幸存對(duì)象復(fù)制到S2,下次觸發(fā)時(shí)將S2和Eden區(qū)域的幸存對(duì)象復(fù)制到S1