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