1.虛擬機棧不用垃圾回收器?
虛擬機棧里的棧幀即對應(yīng)代碼中的一個方法。代碼運行的過程,即棧幀入棧出棧的過程。
一個方法執(zhí)行完,棧幀出棧后,即被銷毀。只有入棧出棧這樣簡單的操作,不需要設(shè)計復(fù)雜的垃圾回收算法來回收。隨著方法的執(zhí)行,線程的結(jié)束正?;厥占纯伞?/p>
在遞歸函數(shù)中,該方法還沒有結(jié)束,就一直不會出棧,如果循環(huán)的次數(shù)過多,??臻g有被擠爆的可能。會出現(xiàn)StackOverflowError 棧溢出。棧溢出也是內(nèi)存溢出的一種情況??赏ㄟ^-Xss (stack size)設(shè)置棧大小。
2.程序計數(shù)器沒有OOM?
程序計數(shù)器(Program Counter Register)也稱PC寄存器。是運行時數(shù)據(jù)區(qū)里唯一一塊沒有Out of Memory的區(qū)域。
只存下一個字節(jié)碼指令的地址,消耗內(nèi)存小且固定,無論方法多深,他只存一條。
只針對一個線程,隨著線程的結(jié)束而銷毀。
3.線程是如何創(chuàng)建和銷毀的?
J2SE中 main函數(shù)即是主線程,程序執(zhí)行完后自動銷戶。
Thread也可以創(chuàng)建多線程。