GC的一個面試題


今天看到一個gc面試題,覺得挺有意思的,寫下來,給自己留個印象

GC是在什么時候,對什么東西,做了什么事情?

1、什么時候

  a、系統空閑的時候

  b、系統自身決定,不可預測的時候調用gc

  c、eden區滿了調用minor gc(),升級到老年代的對象大於老年代剩余空間調用full gc()

  d、程序員不能具體控制時間,系統在不可預測的時間調用System.gc()函數的時候;當然可以通過調優,用NewRatio控制newObject和oldObject的比例,用MaxTenuringThreshold 控制進入oldObject的次數,使得oldObject 存儲空間延遲達到full gc,從而使得計時器引發gc時間延遲OOM的時間延遲,以延長對象生存期。

2、對什么東西

  a、不使用的對象

  b、超出作用域的對象,計步器為空的對象

  c、從gc root開始搜索,搜不到的對象

  d、超出了作用域或引用計數為空的對象;從gc root開始搜索找不到的對象,而且經過一次標記、清理,仍然沒有復活的對象。

3、做什么

  a、刪除不使用的對象,騰出內存空間

  b、隨便說說一些停止線程,運行finalize的說明

  c、說說eden區和from suvivor和to suvivor干啥用的,老年代中的標記清理和復制清理等等

  d、刪除不使用的對象,回收內存空間;運行默認的finalize,當然程序員想立刻調用就用dipose調用以釋放資源如文件句柄,JVM用from survivor、to survivor對它進行標記清理,對象序列化后也可以使它復活。

 

是不是看到上面的答案,發現好多坑。

 


免責聲明!

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



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