更新時間:2020-08-26 10:05:26 來源:動力節點 瀏覽1381次
大家都知道,Java中有堆、棧和方法區,那它們之間有什么關系呢?小編就給Java堆棧方法區做了一個簡單分析。
基礎數據類型直接在棧空間分配, 方法的形式參數,直接在棧空間分配,當方法調用完成后從棧空間回收。 引用數據類型,需要用new來創建,既在棧空間分配一個地址空間,又在堆空間分配對象的類變量 。 方法的引用參數,在棧空間分配一個地址空間,并指向堆空間的對象區,當方法調用完成后從棧空間回收。
局部變量 new 出來時,在棧空間和堆空間中分配空間,當局部變量生命周期結束后,棧空間立刻被回收,堆空間區域等待GC回收。 方法調用時傳入的 literal 參數,先在棧空間分配,在方法調用完成后從棧空間分配。字符串常量在 DATA 區域分配 ,this 在堆空間分配 。數組既在棧空間分配數組名稱, 又在堆空間分配數組實際的大小!
哦 對了,補充一下static在DATA區域分配。
從Java的這種分配機制來看,堆棧又可以這樣理解:堆棧(Stack)是操作系統在建立某個進程時或者線程(在支持多線程的操作系統中是線程)為這個線程建立的存儲區域,該區域具有先進后出的特性。
每一個Java應用都唯一對應一個JVM實例,每一個實例唯一對應一個堆。應用程序在運行中所創建的所有類實例或數組都放在這個堆中,并由應用所有的線程共享.跟C/C++不同,Java中分配堆內存是自動初始化的。Java中所有對象的存儲空間都是在堆中分配的,但是這個對象的引用卻是在堆棧中分配,也就是說在建立一個對象時從兩個地方都分配內存,在堆中分配的內存實際建立這個對象,而在堆棧中分配的內存只是一個指向這個堆對象的指針(引用)而已。
大家對Java堆棧方法區了解了嗎?如果還有不懂的地方,可以在動力節點官網技術文檔中查閱相關資料。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習