Java中的棧(stack)和堆(heap)是兩個重要的存儲區域,它們都是在程序運行時動態分配的內存空間。
棧是儲存方法調用和局部變量的一塊內存區域,它的大小是固定的。當程序進入一個方法時,會在棧中為該方法分配一段內存空間,用來存儲方法中的局部變量和方法調用的參數。當方法執行完畢后,棧中分配的內存空間會被自動釋放。
public void method(int a, int b) { int c = a + b; // c為局部變量 // 方法執行過程中的其他代碼 }
堆是儲存Java對象的一塊內存區域,它的大小是不固定的。當我們創建一個新的Java對象時,會在堆中為該對象分配一段內存空間,并返回該對象的引用(reference)。堆中存儲的對象是可以被所有線程所共享的。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } } Person p = new Person("張三", 20); // 在堆中分配內存空間,并返回對象的引用
由于棧和堆都是動態分配的內存空間,它們的使用是需要謹慎的。如果我們在棧中分配過多的內存空間,可能會導致棧溢出(stack overflow);如果我們在堆中創建過多的對象,可能會導致內存泄露(memory leak)。