Posted on 2010-10-09 17:19
kangaroo 閱讀(551)
評論(0) 編輯 收藏
簡單的說,jvm的堆是存放對象的地方,棧存放的是基本數據類型和對象的引用。jvm棧是運行時的單位,jvm堆是存儲的單位。java中每個線程都有一個棧與之對應,這個很容易理解,每一個線程都有其特殊的執行流程邏輯,因此需要一個獨立的線程棧與之對應。jvm棧因為是運行時單位,所以里面存儲的信息都是跟當前線程相關的東西,如局部變量、運行時狀態,返回值等。而jvm堆是真正存放數據的地方,多個jvm棧可以共享堆中的數據。
jvm堆和棧分離的好處,從軟件設計的角度看,棧代表處理邏輯,堆代表數據,分而治之,邏輯更加清楚。因為堆中的內容可以被共享,節省了空間。從面向對象的角度,對象的屬性,即數據,被存放在堆中,而對象中的方法,則是運行邏輯,存放在棧中。
平時我們在eclipse啟動程序,我們可以通過-Xms,-Xmx來設置大小,其實是在設置初始堆空間,和最大堆空間的大小。