Java預習學習筆記6(動力節(jié)點版,含圖析與注釋):棧內存,堆內存、方法區(qū)內存,壓棧


在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內存中分配。當在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內存空間,當超過變量的作用域后,Java會自動釋放掉為該變量所分配的內存空間,該內存空間可以立即被另作他用。
棧的優(yōu)勢是,存取速度比堆要快,僅次于寄存器,棧數(shù)據(jù)可以共享。但缺點是,存在棧中的數(shù)據(jù)大小與生存期必須是確定的,缺乏靈活性。棧中主要存放一些基本類型的變量(,int, short, long, byte, float, double, boolean, char)和對象句柄。棧有一個很重要的特殊性,就是存在棧中的數(shù)據(jù)可以共享。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 棧:聲明對象時 給對象初始化 Student stu=
方法區(qū):存放代碼;靜態(tài)變量,靜態(tài)方法,字符串常量,(在堆內存中)
堆其他部分:給對象分布一個內存地址 new Student
內存地址中有普通變量和普通方法
給對象的變量賦值:首先找到對象賦指的內存地址,如果有字符串賦值會到方法區(qū)去找字符串
1 JVM (Java虛擬機)主要包括三塊內存空間。分別是:棧內存,堆內存、方法區(qū)內存。
2.堆內存和方法區(qū)內存各有1個。一個線程,一個棧內存。

3.方法調用的時候,該方法所需要的內存空間在棧內存中分配,稱為壓棧。方法執(zhí)行結束之后,該方法所屬的內存空間釋放,稱為彈棧。
4.棧中主要存儲的是方法體當中的局部變量
5.方法的代碼片段以及整個類的代碼片段都被存儲到方法區(qū)內存當中,在類加載的時候這些代碼片段會載入。
6、在程序執(zhí)行過程中使用new運算符創(chuàng)建的java對象,存儲在堆內存當中。對象內部有實例變量,所以實例變量存儲在堆內存當中。
標簽: