GC(垃圾处理机制)面试加薪必备
1: 詳細解釋Java中垃圾收集的主要流程。
垃圾收集主要有兩種形式:手工、自動
自動會不定期進行回收,以釋放無用的空間
手工調用的是System類中的gc()方法,此方法實際上調用的是Runtime類中的gc()方法,當一個對象被回收之前將調用類中的finlalize()方法,此方法為 Object類所提供,表示對象回收前的收尾工作。即使出現了異常,也不影響程序的執行,而且此方法拋出的是Throwable,表示可能是異常也可能是錯誤。
2、GC是什么? 為什么要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。
3、垃圾回收的優點和原理。并考慮2種回收機制。
Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由于有個垃圾回收機制, Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
4、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?
對于GC來說,當程序員創建對象時,GC就開始監控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些對象為"不可達"時,GC就有責任回收這些內存空間。可以。程序員可以手動執行System.gc(),通知GC運行,但是Java語言規范并不保證GC一定會執行。
5、垃圾回收機制,如何優化程序?
Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的w時候不再需要考慮內存管理。由于有個垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。
回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
垃圾回收機制 垃圾收集是將分配給對象但不再使用的內存回收或釋放的過程。如果一個對象沒有指向它的引用或者其賦值為null,則次對象適合進行垃圾回收.
垃圾回收機以低優先級運行
檢查不被使用和指向的對象把它刪除。
====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對它進行標記清理,對象序列化后也可以使它復活。
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對它進行標記清理,對象序列化后也可以使它復活。
總結
以上是生活随笔為你收集整理的GC(垃圾处理机制)面试加薪必备的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 密码忘记了怎么办? [仅ms
- 下一篇: 点个外卖搞定「软中断」