① GC是什麼 為什麼要有GC (基礎)。
gc是一個java虛擬機的過程,用來收集程序不再使用的實例,並且將他們的空間釋放交還給系統,這個過程一般不需要程序員自己調用,java虛擬機會自動在系統空閑的時候執行該過程。
就像c++中類要有一個析構函數一樣,如果將所有的對象都存在內存中,會造成內存不足,所以當有的實例以後將不再使用的時候就要調用析構函數將他從內存中刪除,java基於安全的考慮取消了析構函數,將程序員從清理內存的工作中解放出來,使之成為虛擬機的工作,這就是要有gc的原因。
② GC是什麼為什麼要有GC
GC:Java的垃圾回收器。
Java是由C++發展來的。它擯棄了C++中一些繁瑣容易出錯的東西。其中有一條就是這個GC。
寫C/C++程序,程序員定義了一個變數,就是在內存中開辟了一段相應的空間來存值。內存再大也是有限的,所以當程序不再需要使用某個變數的時候,就需要釋放這個內存空間資源,好讓別的變數來用它。在C/C++中,釋放無用變數內存空間的事情要由程序員自己來解決。就是說當程序員認為變數沒用了,就應當寫一條代碼,釋放它佔用的內存。這樣才能最大程度地避免內存泄露和資源浪費。但是這樣顯然是非常繁瑣的。程序比較大,變數多的時候往往程序員就忘記釋放內存或者在不該釋放的時候釋放內存了。而且釋放內存這種事情,從開發角度說,不應當是程序員所應當關注的。程序員所要做的應該是實現所需要的程序功能,而不是耗費大量精力在內存的分配釋放上。
Java有了GC,就不需要程序員去人工釋放內存空間。當Java虛擬機發覺內存資源緊張的時候,就會自動地去清理無用變數所佔用的內存空間。當然,如果需要,程序員可以在Java程序中顯式地使用System.gc()來強制進行一次立即的內存清理。
③ Java中gc的作用是什麼
System.gc()用來強制立即回收垃圾,即釋放內存。
java對內存的釋放採取的垃圾自動回收機制,在編程的時候不用考慮變數不用時釋放內存,java虛擬機可以自動判斷出並收集到垃圾,但一般不會立即釋放它們的內存空間,當然也可以在程序中使用System.gc()來強制垃圾回收,但是要注意的是,系統並不保證會立即進行釋放內存。
④ java中GC是什麼為什麼要有GC
gc是指垃圾回收機制,當一個對象不能再被後續程序所引用到時,這個對象所佔用的內存空間就沒有存在的意義了,java虛擬機會不定時的去檢測內存中這樣的對象,然後回收這塊內存空間。
⑤ 面試題:java GC是在什麼時候,對什麼東西,做
關於GC需要理解以下幾方面:
GC(Garbage Collection)垃圾回收機制。
執行時間:內存不夠用或者CPU空閑時由JVM執行
操作對象:清理無用對象(沒有被引用到的對象)所佔用的內存空間
⑥ 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"。
⑦ 想知道gc是什麼呢
gc是垃圾收集的意思。內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的。
gc的特點
Java語言沒有提供釋放已分配內存的顯示操作方法,Java程序員不用擔心內存管理,因為垃圾收集器會自動進行管理,要請求垃圾收集垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存,垃圾回收器通常是作為一個單獨的低優先順序的線程運行。
不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清除和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收,在Java誕生初期,垃圾回收是Java最大的亮點之一。