1、什麼是垃圾
- 垃圾收集,不是Java語言的伴生產物。早在1960年,第一門開始使用內存動態分配和垃圾收集技術的Lisp語言誕生。
- 關於垃圾收集有三個經典問題:
- 哪些內存需要回收?
- 什麼時候回收?
- 如何回收?
- 垃圾收集機制是Java的招牌能力,極大地提高了開發效率。如今,垃圾收集幾乎成爲現代語言的標配,即使經過如此長時間的發展, Java的垃圾收集機制仍然在不斷的演進中,不同大小的設備、不同特徵的應用場景,對垃圾收集提出了新的挑戰,這當然也是面試的熱點。
大廠面試題
你知道哪幾種垃圾回收器,各自的優缺點,重點講一下cms和g1
一面: JVM GC算法有哪些, 目前的JDK版本採用什麼回收算法
一面: GC的兩種判定方法? CMS收集器與G1收集器的特點。
一面: CMS特點,垃圾回收算法有哪些?各自的優缺點,他們共同的缺點是什麼?
一面: java的垃圾回收器都有哪些,說下g1的應用場景,平時你是如何搭配使用垃圾回收器的
你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms和G1,包括原理,流程,優缺點。垃圾回收算法的實現原理。
System.gc()和runtime.gc ()會做什麼事情?
CMS和G1瞭解麼, CMS解決什麼問題,說一下回收的過程。
> 垃圾是指在運行程序中沒有任何指針指向的對象,這個對象就是需要被回收的垃圾。
> 外文: An object is considered garbage when it can no longer be reached from any pointer in the running program.
- ,一個基本認知是如果不進行垃圾回收,內存遲早都會被消耗完,因爲不斷地分配內存空間而不進行回收,就好像不停地生產生活垃圾而從來不打掃一樣。
- ,垃圾回收也可以清除內存裏的記錄碎片。碎片整理將所佔用的堆內存移到堆的一端,以便JVM將整理出的內存分配給新的對象。
- ,用戶越來越多,沒有GC就不能保證應用程序的正常進行。而經常造成STW的GC又跟不上實際的需求,所以纔會不斷地嘗試對GC進行優化。
- ,但是會給開發人員帶來頻繁申請和釋放內存的管理負擔。倘若有一處內存區間由於程序員編碼的問題忘記被回收,那麼就會產生內存泄漏,垃圾對象永遠無法被清除,隨着系統運行時間的不斷增長,垃圾對象所耗內存可能持續上升,直到出現內存溢出並造成應用程序崩潰。
現在,除了Java以外, C#、Python、Ruby等語言都使用了自動垃圾回收的思想,也是未來發展趨勢。可以說,這種自動化的內存分配和垃圾回收的方式已經成爲現代開發語言必備的標準。
> 沒有垃圾回收器, java也會和cpp一樣,各種懸垂指針,野指針,泄露問題讓你頭疼不已。
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/toc.html