本文目錄一覽:
java中GC是什麼?為什麼要有GC?
GC是垃圾回收的意思(gabage collection),內存處理器是編程人員容易出現問題的地方,忘記或者錯誤的內存回收導致程序或者系統的不穩定甚至崩潰,java的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,java語言沒有提供釋放已分配內存的俄顯示操作方法。
希望能幫到你,謝謝!
java中GC指的是什麼?
gc是指垃圾回收機制,當一個對象不能再被後續程序所引用到時,這個對象所佔用的內存空間就沒有存在的意義了,java虛擬機會不定時的去檢測內存中這樣的對象,然後回收這塊內存空間。
GC的基本原理:
對於程序員來說,用new關鍵字即在堆中分配了內存,我們稱之為“可達”。對於GC來說,只要所有被引用的對象為null時,我們稱之為“不可達”,就將進行內存的回收。
當一個對象被創建時,GC開始監控這個對象的大小、內存地址及使用情況。GC採用有向圖的方式記錄和管理堆(heap)中的所有對象,通過這種方式可以明確哪些對象是可達的,哪些不是。當確定為不可達時,則對其進行回收。
保證GC在不同平台的實現問題,java規範對其很多行為沒有進行嚴格的規定。對於採用什麼算法,什麼時候進行回收等。
Java垃圾回收:GC在什麼時候對什麼做了什麼
1、首先,GC又分為minor GC 和 Full GC(major GC)。Java堆內存分為新生代和老年代,新生代中又分為1個eden區和兩個Survior區域。
2、一般情況下,新創建的對象都會被分配到eden區,這些對象經過一個minor gc後仍然存活將會被移動到Survior區域中,對象在Survior中沒熬過一個Minor GC,年齡就會增加一歲,當他的年齡到達一定程度時,就會被移動到老年代中。
3、當eden區滿時,還存活的對象將被複制到survior區,當一個survior區滿時,此區域的存活對象將被複制到另外一個survior區,當另外一個也滿了的時候,從前一個Survior區複製過來的並且此時還存活的對象,將可能被複制到老年代。因為年輕代中的對象基本都是朝生夕死(80%以上),所以年輕代的垃圾回收算法使用的是複製算法,複製算法的基本思想是將內存分為兩塊,每次只有其中一塊,當這一塊內存使用完,就將還活着的對象複製到另一塊上面。複製算法不會產生內存碎片。
4、在GC開始的時候,對象只會存在於eden區,和名為“From”的Survior區,Survior區“to”是空的。緊接着GCeden區中所有存活的對象都會被複制到“To”,而在from區中,仍存活的對象會根據他們的年齡值來決定去向,年齡到達一定只的對象會被複制到老年代,沒有到達的對象會被複制到to survior中,經過這次gc後,eden區和fromsurvior區已經被清空。這個時候,from和to會交換他們的角色,也就是新的to就是上次GC前的fromMinor GC:從年輕代回收內存。
5、當jvm無法為一個新的對象分配空間時會觸發Minor GC,比如當Eden區滿了。當內存池被填滿的時候,其中的內容全部會被複制,指針會從0開始跟蹤空閑內存。Eden和Survior區不存在內存碎片寫指針總是停留在所使用內存池的頂部。執行minor操作時不會影響到永久代,從永久帶到年輕代的引用被當成GC roots,從年輕代到永久代的引用在標記階段被直接忽略掉(永久代用來存放java的類信息)。如果eden區域中大部分對象被認為是垃圾,永遠也不會複製到Survior區域或者老年代空間。如果正好相反,eden區域大部分新生對象不符合GC條件,Minor GC執行時暫停的線程時間將會長很多。Minor may call “stop the world”。
深入理解 Java 之 GC 到底如何工作
Garbage Collection簡稱為GC,是垃圾回收的意思、內存處理器是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰。Java語言提供的GC功能可以自動的檢測對象是否超過作用域,從而達到自動回收內存的目的,java語言沒有提供釋放已分配內存的顯示操作方法,資源回收工作全部交由GC來完成,程序員不能精確的控制垃圾回收的時機。
GC在實現垃圾回收時的基本原理:
Java的內存管理實際就是對象的管理,其中包括對像的分配和釋放。對於程序員來說,分配對象使用new關鍵字,釋放對象時只是將對象賦值為null,讓程序員不能夠再訪問到這個對象,該對象被稱為“不可達”。GC將負責回收所有“不可達”對象的內存空間。
對於GC來說,當程序員創建對象時,GC就開始監控這個對象地址、大小以及使用情況。通常GC採用有向圖的方式記錄並管理堆中的所有對象,通過這種方式確定哪些對象是“可達”的,哪些對象是“不可達”的。當GC確定一些對象為“不可達時”GC就有責任回收這些內存空間,但為了GC能夠在不同的平台上實現,java規範對GC的很多行為都沒有進行嚴格的規定。例如對於採用什麼類型的回收算法、什麼時候進行回收等重要問題都沒有明確的規定,因此不同的JVM實現着不同的的實現算法,這也給JAVA程序員的開發帶來了很多不確定性。
JVM的GC是什麼
最近做了一個需求,給hadoop集群做監控面板,做完了,還得寫說明文檔。如果說,做的時候,是研發主導,那麼做完了,說明文檔,產品經理還是逃不掉 tat
gc(garbage collection),垃圾收集,指JVM用於釋放那些不再使用的對象所佔用的內存。
所以什麼是JVM呢?(作為非技術人員,有一種直覺,看到這種很專業的名詞,就想跳過,但是跳過了,有很大可能會miss掉重要信息,所以我還是研究一下JVM到底是什麼吧!!)
Java Virtual Machine(Java虛擬機)的縮寫。
JVM是java的核心和基礎,在java編譯器和os平台之間的虛擬處理器。
誒,到這裡,我突然意識到,JVM是Java虛擬機,為什麼Hadoop的指標會有JVM呢?莫非,Hadoop是用Java開發的,百度了一下,答案,Yes。嘿,還挺反直覺,我還以為是C語言開發的(沒有證據,就是直覺),現實生活中存在的很多直覺其實是不正確的。
最後一句話,也作為6月的座右銘
同樣,在項目管理或AI商業化過程中,同理,我們不因當前的不完美而沮喪,因為我們的努力,就是一個不斷追求完美的過程。
參考:
原創文章,作者:VLAK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148040.html