java 面試 - 內存溢出,內存泄露 , GC的基本概念

內存溢出  out of memory,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。

內存泄露  memory leak,是指程序在申請內存後,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積後果很嚴重,無論多少內存,遲早會被佔光。其實說白了就是該內存空間使用完畢之後未回收。

 

GC的基本概念

gc分爲full gc 跟 minor gc(Young GC也就是Minor GC),當每一塊區滿的時候都會引發gc。

  1. Scavenge GC
    一般情況下,當新對象生成,並且在Eden申請空間失敗時,就觸發了Scavenge GC,堆Eden區域進行GC,清除非存活對象,並且把尚且存活的對象移動到Survivor區。然後整理Survivor的兩個區。

  2. Full GC
    對整個堆進行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此應該儘可能減少Full GC。有如下原因可能導致Full GC:

  • 上一次GC之後Heap的各域分配策略動態變化

  • System.gc()被顯示調用

  • Perm域(永久代)被寫滿

  • old 代被寫滿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章