堆和棧都可以靜態(tài)分配 請高手詳細(xì)的解答一下JAVA的堆,棧,方法區(qū),謝謝?
請高手詳細(xì)的解答一下JAVA的堆,棧,方法區(qū),謝謝?方法區(qū)(非堆):是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。java堆:是虛擬機(jī)中所管
請高手詳細(xì)的解答一下JAVA的堆,棧,方法區(qū),謝謝?
方法區(qū)(非堆):是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。java堆:是虛擬機(jī)中所管理的內(nèi)存中區(qū)域最大的一塊,是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動時(shí)創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對象實(shí)例,幾乎所有的對象實(shí)例都在這里分配內(nèi)存。java堆是垃圾收集器管理的主要區(qū)域。java虛擬機(jī)棧:線程私有的,它的生命周期與線程相同。每個(gè)方法被執(zhí)行的時(shí)候都會同時(shí)創(chuàng)建一個(gè)棧幀,用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。每個(gè)方法被調(diào)用直至執(zhí)行完成的過程,就對應(yīng)著一個(gè)棧幀在虛擬機(jī)中從入棧到出棧的過程。
java中,靜態(tài)方法被調(diào)用是,存儲在內(nèi)存的哪個(gè)區(qū)域?是棧?還是放大區(qū)?還是兩者都有?
堆區(qū):
1.存儲的全部是對象,每個(gè)對象都包含一個(gè)與之對應(yīng)的class的信息。(class的目的是得到操作指令)
2.jvm只有一個(gè)堆區(qū)(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身 棧區(qū): 1.每個(gè)線程包含一個(gè)棧區(qū),棧中只保存基礎(chǔ)數(shù)據(jù)類型的對象和自定義對象的引用(不是對象),對象都存放在堆區(qū)中 2.每個(gè)棧中的數(shù)據(jù)(原始類型和對象引用)都是私有的,其他棧不能訪問。
3.棧分為3個(gè)部分:基本類型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)。 方法區(qū): 1.又叫靜態(tài)區(qū),跟堆一樣,被所有的線程共享。方法區(qū)包含所有的class和static變量。 2.方法區(qū)中包含的都是在整個(gè)程序中永遠(yuǎn)唯一的元素,如class,static變量。
C語言中的堆、棧、靜態(tài)存儲區(qū)?我知道的是?
靜態(tài)存儲區(qū)是指在程序從開始到運(yùn)行此區(qū)間都存在,而棧是限定僅在表尾進(jìn)行插入或刪除操作的線性表,運(yùn)行棧是把控制棧中的信息拓廣到包括過程活動所需的所有局部信息(即活動記錄)、控制棧就變成了活動記錄棧