Posted on 2010-10-09 17:19
kangaroo 閱讀(554)
評(píng)論(0) 編輯 收藏
簡(jiǎn)單的說(shuō),jvm的堆是存放對(duì)象的地方,棧存放的是基本數(shù)據(jù)類(lèi)型和對(duì)象的引用。jvm棧是運(yùn)行時(shí)的單位,jvm堆是存儲(chǔ)的單位。java中每個(gè)線程都有一個(gè)棧與之對(duì)應(yīng),這個(gè)很容易理解,每一個(gè)線程都有其特殊的執(zhí)行流程邏輯,因此需要一個(gè)獨(dú)立的線程棧與之對(duì)應(yīng)。jvm棧因?yàn)槭沁\(yùn)行時(shí)單位,所以里面存儲(chǔ)的信息都是跟當(dāng)前線程相關(guān)的東西,如局部變量、運(yùn)行時(shí)狀態(tài),返回值等。而jvm堆是真正存放數(shù)據(jù)的地方,多個(gè)jvm棧可以共享堆中的數(shù)據(jù)。
jvm堆和棧分離的好處,從軟件設(shè)計(jì)的角度看,棧代表處理邏輯,堆代表數(shù)據(jù),分而治之,邏輯更加清楚。因?yàn)槎阎械膬?nèi)容可以被共享,節(jié)省了空間。從面向?qū)ο蟮慕嵌龋瑢?duì)象的屬性,即數(shù)據(jù),被存放在堆中,而對(duì)象中的方法,則是運(yùn)行邏輯,存放在棧中。
平時(shí)我們?cè)趀clipse啟動(dòng)程序,我們可以通過(guò)-Xms,-Xmx來(lái)設(shè)置大小,其實(shí)是在設(shè)置初始堆空間,和最大堆空間的大小。