生活随笔
收集整理的這篇文章主要介紹了
垃圾oracle_第 14 章 垃圾回收概述
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第 14 章 垃圾回收都不懂,征服面試官!
1、垃圾收集面試題
回顧 JVM 學習路線
關于垃圾收集
Java 和 C++語言的區別,就在于垃圾收集技術和內存動態分配上,C語言沒有垃圾收集技術,需要我們手動的收集。垃圾收集,不是Java語言的伴生產物。早在1960年,第一門開始使用內存動態分配和垃圾收集技術的Lisp語言誕生。關于垃圾收集有三個經典問題:垃圾收集機制是Java的招牌能力,極大地提高了開發效率。如今,垃圾收集幾乎成為現代語言的標配,即使經過如此長時間的發展,Java的垃圾收集機制仍然在不斷的演進中,不同大小的設備、不同特征的應用場景,對垃圾收集提出了新的挑戰,這當然也是面試的熱點。 瞅瞅大廠面試題
螞蟻金服
你知道哪幾種垃圾回收器,各自的優缺點,重點講一下CMS和G1?JVM GC算法有哪些,目前的JDK版本采用什么回收算法?G1回收器講下回收過程GC是什么?為什么要有GC?GC的兩種判定方法?CMS收集器與G1收集器的特點百度
說一下GC算法,分代回收說下垃圾收集策略和算法天貓
JVM GC原理,JVM怎么回收內存CMS特點,垃圾回收算法有哪些?各自的優缺點,他們共同的缺點是什么?滴滴
Java的垃圾回收器都有哪些,說下G1的應用場景,平時你是如何搭配使用垃圾回收器的京東
你知道哪幾種垃圾收集器,各自的優缺點,重點講下CMS和G1,包括原理,流程,優缺點。垃圾回收算法的實現原理阿里
講一講垃圾回收算法。什么情況下觸發垃圾回收?如何選擇合適的垃圾收集算法?JVM有哪三種垃圾回收器?字節跳動
常見的垃圾回收器算法有哪些,各有什么優劣?System.gc()和Runtime.gc()會做什么事情?Java GC機制?GC Roots有哪些?Java對象的回收方式,回收算法。CMS和G1了解么,CMS解決什么問題,說一下回收的過程。CMS回收停頓了幾次,為什么要停頓兩次?2、為什么需要GC
什么是垃圾?
什么是垃圾(Garbage)呢?
垃圾是指在運行程序中沒有任何指針指向的對象,這個對象就是需要被回收的垃圾。
外文:An object is considered garbage when it can no longer be reached from any pointer in the running program.
如果不及時對內存中的垃圾進行清理,那么,這些垃圾對象所占的內存空間會一直保留到應用程序結束,被保留的空間無法被其他對象使用。甚至可能導致內存溢出。
磁盤碎片整理
想要學習GC,首先需要理解為什么需要GC?
對于高級語言來說,一個基本認知是如果不進行垃圾回收,內存遲早都會被消耗完,因為不斷地分配內存空間而不進行回收,就好像不停地生產生活垃圾而從來不打掃一樣。除了釋放沒用的對象,垃圾回收也可以清除內存里的記錄碎片。碎片整理將所占用的堆內存移到堆的一端,以便JVM將整理出的內存分配給新的對象。隨著應用程序所應付的業務越來越龐大、復雜,用戶越來越多,沒有GC就不能保證應用程序的正常進行。而經常造成STW的GC又跟不上實際的需求,所以才會不斷地嘗試對GC進行優化。3、早期垃圾回收
在早期,開發人員需要手動回收內存
在早期的C/C++時代,垃圾回收基本上是手工進行的。開發人員可以使用new關鍵字進行內存申請,并使用delete關鍵字進行內存釋放。比如以下代碼:MibBridge *pBridge= new cmBaseGroupBridge();
//如果注冊失敗,使用Delete釋放該對象所占內存區域
if(pBridge->Register(kDestroy)!=NO ERROR)delete pBridge;
這種方式可以靈活控制內存釋放的時間,但是會給開發人員帶來頻繁申請和釋放內存的管理負擔。倘若有一處內存區間由于程序員編碼的問題忘記被回收,那么就會產生內存泄漏,垃圾對象永遠無法被清除,隨著系統運行時間的不斷增長,垃圾對象所耗內存可能持續上升,直到出現內存溢出并造成應用程序崩潰。有了垃圾回收機制后,上述代碼極有可能變成這樣MibBridge *pBridge=new cmBaseGroupBridge();
pBridge->Register(kDestroy);
現在,除了Java以外,C#、Python、Ruby等語言都使用了自動垃圾回收的思想,也是未來發展趨勢,可以說這種自動化的內存分配和來及回收方式已經成為了線代開發語言必備的標準。4、Java 垃圾回收機制
4.1、自動內存管理
自動內存管理的優點
Oracle官網關于垃圾回收的介紹
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/toc.html
自動內存管理的優點
自動內存管理,無需開發人員手動參與內存的分配與回收,這樣降低內存泄漏和內存溢出的風險沒有垃圾回收器,java也會和cpp一樣,各種懸垂指針,野指針,泄露問題讓你頭疼不已。自動內存管理機制,將程序員從繁重的內存管理中釋放出來,可以更專心地專注于業務開發關于自動內存管理的擔憂
對于Java開發人員而言,自動內存管理就像是一個黑匣子,如果過度依賴于"自動",那么這將會是一場災難,最嚴重的就會弱化Java開發人員在程序出現內存溢出時定位問題和解決問題的能力。此時,了解JVM的自動內存分配和內存回收原理就顯得非常重要,只有在真正了解JVM是如何管理內存后,我們才能夠在遇見OutofMemoryError時,快速地根據錯誤異常日志定位問題和解決問題。當需要排查各種內存溢出、內存泄漏問題時,當垃圾收集成為系統達到更高并發量的瓶頸時,我們就必須對這些"自動化"的技術實施必要的監控和調節。4.2、GC 的作用域
GC 的作用區域
垃圾收集器可以對年輕代回收,也可以對老年代回收,甚至是全棧和方法區的回收,其中,Java堆是垃圾收集器的工作重點從次數上講:頻繁收集Young區較少收集Old區基本不收集Perm區(元空間)GC主要關注于方法區和堆中的垃圾收集 你只管學習,我來負責記筆記 關注公眾號! ,更多筆記,等你來拿,謝謝
http://weixin.qq.com/r/KC0-J4fEvNrDrcNE93g6 (二維碼自動識別)
總結
以上是生活随笔為你收集整理的垃圾oracle_第 14 章 垃圾回收概述的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。