在Java程序中,棧和堆是兩種重要的內(nèi)存存儲(chǔ)區(qū)域。
棧是線程私有的內(nèi)存區(qū)域,用于存放基本類型數(shù)據(jù)(如int、char、boolean等)和對(duì)象引用。其特點(diǎn)是后進(jìn)先出,棧的存儲(chǔ)空間較小,但是讀取速度快。
public static void main(String[] args) { int a = 10; String str = "Hello World!"; Student stu = new Student(); }
上面的代碼中,變量a、str和stu都是存放在棧中的。當(dāng)函數(shù)結(jié)束后,棧中的變量會(huì)自動(dòng)銷毀,釋放空間。
堆是線程共享的內(nèi)存區(qū)域,用于存放復(fù)雜對(duì)象的實(shí)例。其特點(diǎn)是隨機(jī)存取,堆的存儲(chǔ)空間較大,但是讀取速度較慢。
public class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } }
上面的代碼中,Student類的實(shí)例對(duì)象是存放在堆中的,并且該對(duì)象的引用也是存放在棧中的。
需要注意的是,當(dāng)堆中的對(duì)象沒(méi)有被任何變量引用時(shí),Java虛擬機(jī)會(huì)通過(guò)垃圾回收機(jī)制自動(dòng)將其銷毀,釋放占用的空間。