java棧stack和堆heap的工作原理,用途及區(qū)別?
java堆和棧的區(qū)別【新手可忽略不影響繼續(xù)學(xué)習(xí)】
Java中內(nèi)存分成兩種:一種是棧stack,一種是堆heap。
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
函數(shù)中的一些基本類型的變量(int, float)和對(duì)象的引用變量(reference)都在函數(shù)的棧中,如int a = 5,有個(gè)地方先存5,之后再讓a指向那個(gè)地方。w=new Window(),是w指向Window的首地址。馬克-to-win,存取速度快,稍遜于寄存器, 比堆快,
函數(shù)執(zhí)行完后,Java會(huì)自動(dòng)釋放掉為函數(shù)里變量開辟的棧內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。
堆heap內(nèi)存用來(lái)存放由new創(chuàng)建的對(duì)象和數(shù)組。堆內(nèi)存,負(fù)責(zé)運(yùn)行時(shí)(runtime, 執(zhí)行生成的class文件時(shí))數(shù)據(jù),由JVM的自動(dòng)管理。缺點(diǎn)是,存取速度較慢。
棧中的引用變量指向堆中的對(duì)象或數(shù)組。