Java虛擬機(JVM)是一個執行Java字節碼的虛擬機,它是Java語言的核心,可以理解為Java編譯器生成的二進制文件在JVM上執行。JVM有兩個主要的內存結構:堆和棧。
堆(Heap)是Java虛擬機的一個區域,用于存儲對象實例。堆是Java程序運行時的動態內存區域,它只需要在內存中有足夠空間即可自動擴展。在堆區存儲的對象都是由Java開發人員通過new操作符動態生成的,因此它們的生命周期一般較長,并且堆中的對象是可以被所有線程訪問的。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } } public static void main(String[] args) { Person person = new Person("Li Lei", 18); }
上面的代碼中,創建了一個Person對象,并將其賦值給變量person。這個對象存儲在JVM的堆中。
與堆不同,棧(Stack)是Java虛擬機的另一個區域,用于存儲局部變量和方法調用。每當一個方法被調用時,就會在棧中分配一塊空間用于存儲該方法的參數、局部變量和返回值。當該方法執行完畢時,棧中的這塊空間就被釋放。因此,棧中的對象生命周期較短,并且它們只能由創建它們的線程訪問。
public static void main(String[] args) { int x = 10; int y = 20; int sum = add(x, y); } public static int add(int a, int b) { return a + b; }
上面的代碼中,變量x和y被分配在棧中,方法調用add(x, y)也在棧中進行,sum變量的值也存儲在棧中。
總的來說,堆和棧都是Java虛擬機內存結構的一部分,它們之間的主要區別在于它們存儲的數據類型和生命周期。