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