⑴ java中垃圾回收器讓工作線程停頓下來是怎麼做的
1、jvm中,在執行垃圾收集演算法時,Java應用程序的其他所有除了垃圾收集收集器線程之外的線程都被掛起。此時,系統只能允許GC線程進行運行,其他線程則會全部暫停,等待GC線程執行完畢後才能再次運行。這些工作都是由虛擬機在後台自動發起和自動完成的,是在用戶不可見的情況下把用戶正常工作的線程全部停下來,這對於很多的應用程序,尤其是那些對於實時性要求很高的程序來說是難以接受的。 但不是說GC必須STW(Stop-The-World,全局暫停), 你也可以選擇降低運行速度但是可以並發執行的收集演算法,這取決於你的業務。
⑵ 什麼是Java的垃圾回收機制內部實現原理是什麼
Java中的對象沒有作用域的概念,只有對象的引用才有作用域。在用new創建出一個對象之後,垃圾回收器就會自動監控該對象,並且會辨別是否需要釋放內存,不需要開發者手動釋放,所以可以很好的防止內存泄漏。
JVM的垃圾回收器採用的是一種分代(generational )回收策略,共分為三個代:
1.Young(年輕代)
年 輕代分三個區。一個Eden區,兩個Survivor區。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被復制到Survivor區 (兩個中的一個),當這個Survivor區滿時,此區的存活對象將被復制到另外一個Survivor區,當這個Survivor去也滿了的時候,從第一 個Survivor區復制過來的並且此時還存活的對象,將被復制「年老區(Tenured)」。需要注意,Survivor的兩個區是對稱的,沒先後關 系,所以同一個區中可能同時存在從Eden復制過來 對象,和從前一個Survivor復制過來的對象,而復制到年老區的只有從第一個Survivor去過來的對象。而且,Survivor區總有一個是空的。
2.Tenured(年老代)
年老代存放從年輕代存活的對象。一般來說年老代存放的都是生命期較長的對象。
3.Perm(持久代)
用 於存放靜態文件,如Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者調用一些class,例如Hibernate等, 在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類。持久代大小通過-XX:MaxPermSize=進行設置。
⑶ java中的垃圾回收是什麼意思
垃圾回收就是gc(gabage collection)。
java比c++的優點就是多了垃圾回收機制,程序員不用去關心垃圾的回收,系統會自動調用去回收內存。
一般我們想回收的時候只需要調用system.gc方法就可以了。系統會自己去調用destroy方法和其他的回收方法釋放內存,節省內存空間。