堆棧、堆、方法區介紹


堆棧、堆、方法區介紹

 

預備知識
java數據類型:

基礎數據類型:boolean、byte、short、char、int、long、float、double

引用數據類型:類、接口、數組

堆棧、堆、方法區
JAVA的JVM的內存可分為3個區:堆(heap)、堆棧(stack)和方法區(method)

堆區:

提供所有類實例和數組對象存儲區域

jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身

棧區:

每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中

每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。

方法區:

又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量。

方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變量。

運行時常量池都分配在 Java 虛擬機的方法區之中

栗子

public void test(){
A a = new A();
int b = 1;
}

public class A{

}


這個栗子中

a是A對象的引用所以放在棧中,A是自定義對象所以放在堆中.

b是基礎數據類型所以在棧中.

A是自定義對象所以放在堆中"應該是new A()

 

小結
這里用一個在別處看到的栗子總結再好不過

堆和棧的區別可以用如下的比喻來看出:

使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就
走,不必理會切菜、洗菜等准備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自
由度小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM