日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

對整個堆進行整理,包括Young、Tenured和Perm。Full GC因為需要對整個對進行回收,所以比Scavenge GC要慢,因此應該盡可能減少Full GC的次數。在對JVM調優的過程中,很大一部分工作就是對于FullGC的調節。有如下原因可能導致Full GC。

為什么要分代

    分代的垃圾回收策略,是基于這樣一個事實:不同的對象的生命周期是不一樣的。因此,不同生命周期的對象可以采取不同的收集方式,以便提高回收效率。

    在JAVA程序運行的過程中,會產生大量的對象,其中有些對象是與業務信息相關,比如Http請求中的Session對象、線程、Socket連接,這類對象跟業務直接掛鉤,因此生命周期比較長。但是還有一些對象,主要是程序運行過程中生成的臨時變量,這些對象生命周期會比較短,比如:String對象,由于其不變類的特性,系統會產生大量的這些對象,有些對象甚至只用一次即可回收。

    試想,在不進行對象存活時間區分的情況下,每次垃圾回收都是對整個堆空間進行回收,花費時間相對會長,同時,因為每次回收都需要遍歷所有存活對象,但實際上,對于生命周期長的對象而言,這種遍歷是沒有效果的,因為可能進行了很多次遍歷,但是他們依舊存在。因此,分代垃圾回收采用分治的思想,進行代的劃分,把不同生命周期的對象放在不同代上,不同代上采用最適合它的垃圾回收方式進行回收。

如何分代

圖片圖片

如圖所示:

    虛擬機中的共劃分為三個代:年輕代(Young Generation)、年老點(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java類的類信息,與垃圾收集要收集的Java對象關系不大。年輕代和年老代的劃分是對垃圾收集影響比較大的。

對象分類

        這種算法并不是一種新的算法,而是根據對象的存活周期的不同而將內存分為幾塊,分別為新生代、老年代和永久代。

        新生代:朝生夕滅的對象(例如:方法的局部變量等)。

        老年代:存活得比較久,但還是要死的對象(例如:緩存對象、單例對象等)。

        永久代:對象生成后幾乎不滅的對象(例如:加載過的類信息)。

內存區域

        回想一下之前jvm對內存的劃分,我們可能就已經猜到了,新生代和老年代都在java堆,永久代在方法區。

java堆對象的回收

        現在,我們來看看分代收集算法是如何針對堆內存進行回收的。

        新生代:采用復制算法,新生代對象一般存活率較低,因此可以不使用50%的內存作為空閑,一般的,使用兩塊10%的內存

作為空閑和活動區間,而另外80%的內存,則是用來給新建對象分配內存的。一旦發生GC,將10%的活動區間與另外80%中存

活的對象轉移到10%的空閑區間,接下來,將之前90%的內存全部釋放,以此類推,下面還是用一張圖來說明:

        解釋下,堆大小=新生代+老年代,新生代與老年代的比例為1:2,新生代細分為一塊較大的Eden空間和兩塊較小的Survivor空間,分別被命名為from和to。

        老年代:老年代中使用“標記-清除”或者“標記-整理”算法進行垃圾回收,回收次數相對較少,每次回收時間比較長。

方法區對象回收

        永久代指的是虛擬機內存中的方法區,永久代垃圾回收比較少,效率也比較低,但也必須進行垃圾回收,否則永久代內存

不夠用時仍然會拋出OutOfMemoryError異常。永久代也使用“標記-清除”或者“標記-整理”算法進行垃圾回收。

什么情況下觸發垃圾回收

    由于對象進行了分代處理,因此垃圾回收區域、時間也不一樣。GC有兩種類型:Scavenge GC和Full GC。

Scavenge GC

    一般情況下,當新對象生成,并且在Eden申請空間失敗時,就會觸發Scavenge GC,對Eden區域進行GC,清除非存活對象,并且把尚且存活的對象移動到Survivor區。然后整理Survivor的兩個區。這種方式的GC是對年輕代的Eden區進行,不會影響到年老代。因為大部分對象都是從Eden區開始的,同時Eden區不會分配的很大,所以Eden區的GC會頻繁進行。因而,一般在這里需要使用速度快、效率高的算法,使Eden去能盡快空閑出來。

Full GC

    對整個堆進行整理,包括Young、Tenured和Perm。Full GC因為需要對整個對進行回收,所以比Scavenge GC要慢,因此應該盡可能減少Full GC的次數。在對JVM調優的過程中,很大一部分工作就是對于FullGC的調節。有如下原因可能導致Full GC:

分享到:
標簽:JVM
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定