JAVA基礎——堆與棧的關係


        我們都知道JAVA是運行在JVM虛擬機上的,而虛擬機又是基於堆棧的,每個java程序運行時都會在一個獨立的JVM虛擬機實例上運行(包括多線程)。

        棧:

                存放基本數據類型對象、引用;

                當程序運行超出其作用域後自動釋放空間;

                存放在棧中的內容讀取速度非常快;(C++一般存放在棧中,所以速度比較快);

                棧中的數據是可以共享的:例如:我們同時創建  int a=1;int b=1;  首先會在棧中創建引用‘a’以及整數 1 ,再創建引用'b',因爲棧中已經存在整數 1 了,所以引用'b'會直接指向已經存在的 整數 1,如果再設置 b = 2;此時棧中沒有發現整數2則會立刻創建儲存空間將2存放進去,這也就說通了爲什麼基本類型是可以用'=='來判斷是否相等的,而其他類型不可以。


        堆:

               存放new出來的實體、數組,實體及數組的引用存放在棧中;(存儲的成本比較大,速度慢)

               當堆中的實體或數組引用無效後,由GC(垃圾回收機制)自動回收(不可控);


        舉例代碼:

public static void main(String[] args) {
		int i = 100;	//棧
		int k = 100;	//棧
		
		mainTest entity1 = new mainTest();//堆
		mainTest entity2 = new mainTest();//堆
		
		System.out.println(i==k);
		System.out.println(entity1==entity2);
	}

堆棧分佈:


                

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章