在Java中,內存被分為堆和棧兩個部分。堆內存用于存儲對象實例,而棧內存用于存儲方法調用和線程的執行。
public void stackTest() { int a = 1; String b = "hello"; stackTest1(a, b); } public void stackTest1(int c, String d) { System.out.println(c + d); }
上面這段代碼展示了Java程序的棧內存使用。
在代碼執行時,當方法stackTest()被調用時,Java虛擬機(JVM)會分配一塊棧幀用于保存參數a和b,然后將棧幀入棧。接著,當方法stackTest1()被調用時,JVM又會分配一塊棧幀用于保存參數c和d,然后將其入棧。
當方法執行結束時,JVM會將棧幀出棧,釋放空間。
public class HeapTest { public static void main(String[] args) { Person p1 = new Person("Tom"); Person p2 = new Person("Jerry"); } } class Person { private String name; public Person(String name) { this.name = name; } }
上面這段代碼展示了Java程序的堆內存使用。
當程序中創建一個對象實例時,JVM會在堆內存中分配一塊空間來存儲對象的屬性值。在上面的例子中,當創建p1和p2對象時,JVM會在堆內存中分別分配空間來保存它們的name屬性。
堆內存中的空間由垃圾回收器來進行管理和釋放,當對象不再被引用時,會被垃圾回收器回收。