為什么棧不用垃圾回收器回收?為什么程序計數器沒有OOM?


1.虛擬機棧不用垃圾回收器?

虛擬機棧里的棧幀即對應代碼中的一個方法。代碼運行的過程,即棧幀入棧出棧的過程。

一個方法執行完,棧幀出棧后,即被銷毀。只有入棧出棧這樣簡單的操作,不需要設計復雜的垃圾回收算法來回收。隨着方法的執行,線程的結束正常回收即可。

 

在遞歸函數中,該方法還沒有結束,就一直不會出棧,如果循環的次數過多,棧空間有被擠爆的可能。會出現StackOverflowError 棧溢出。棧溢出也是內存溢出的一種情況。可通過-Xss (stack size)設置棧大小。

 

2.程序計數器沒有OOM?

程序計數器(Program Counter Register)也稱PC寄存器。是運行時數據區里唯一一塊沒有Out of Memory的區域。

只存下一個字節碼指令的地址,消耗內存小且固定,無論方法多深,他只存一條。

只針對一個線程,隨着線程的結束而銷毀。

https://www.cnblogs.com/niugang0920/p/12424671.html

 

3.線程是如何創建和銷毀的?

J2SE中 main函數即是主線程,程序執行完后自動銷戶。

Thread也可以創建多線程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM