Java中,堆和棧分別是兩種不同的內(nèi)存分配空間。在Java程序運行時,它們扮演著不同的角色。
棧指的是程序中的一塊內(nèi)存空間,它用來存儲局部變量,一旦方法結(jié)束后,這塊內(nèi)存空間就會被釋放。
public static void main(String[] args){ int a = 1; float b = 2.0f; String s = "Hello"; //棧中分配變量a、b、s的內(nèi)存空間 System.out.println(a + b); }
堆是Java中的另一種內(nèi)存空間,用來存儲Java的對象,不同于棧,它的內(nèi)存空間并不隨著方法的結(jié)束而釋放,由垃圾回收機制進行管理。
public class Student{ int id; String name; public Student(int id, String name){ this.id = id; this.name = name; } } public static void main(String[] args){ Student s = new Student(1, "張三"); //堆中分配一個Student類型對象,并初始化 System.out.println(s.name); }
所以,總的來說,棧的空間小、性能高、隨著方法的結(jié)束而釋放,常用來存儲方法中的局部變量,而堆的空間大、生命周期長、由內(nèi)存管理系統(tǒng)進行管理,常用來存儲Java中的對象。