成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文吃透JVM分代回收機制

開發 前端
對整個堆進行整理,包括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:

責任編輯:武曉燕 來源: java知路
相關推薦

2021-11-05 15:23:20

JVM回收算法

2021-02-26 05:24:35

Java垃圾回收

2010-09-25 15:33:19

JVM垃圾回收

2020-05-14 13:39:19

Java 垃圾回收機制

2010-09-16 15:10:24

JVM垃圾回收機制

2010-09-25 15:26:12

JVM垃圾回收

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2023-06-07 16:00:40

JavaScriptV8語言

2010-09-26 11:22:22

JVM垃圾回收JVM

2024-08-26 08:58:50

2017-04-25 14:39:55

JVM內存Java

2010-09-27 09:01:26

JVM分代垃圾回收

2025-04-09 05:22:00

2017-03-03 09:26:48

PHP垃圾回收機制

2017-08-17 15:40:08

大數據Python垃圾回收機制

2013-04-01 10:07:19

Java內存回收機制

2009-06-23 14:15:00

Java垃圾回收

2011-12-05 12:51:58

JVMJava

2012-01-10 11:19:35

JavaJVM

2010-01-06 09:28:08

JVM分代垃圾回收
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99视频 | 日韩一区二区免费视频 | 亚洲国产精品成人无久久精品 | 欧美亚洲激情 | 色免费在线视频 | 全免费a级毛片免费看视频免费下 | 久久久久久久一区 | 亚洲午夜网 | 久久婷婷色 | 一级全黄少妇性色生活免费看 | 日本在线免费视频 | 国产成人99久久亚洲综合精品 | 99精品亚洲国产精品久久不卡 | 神马久久av | 99精品久久 | 狠狠做深爱婷婷综合一区 | 午夜影院网站 | 国产精品毛片无码 | 久久久久久国产精品 | 精品视频一区二区三区 | 国产精品久久久久aaaa | av夜夜操| 深夜福利亚洲 | 九九九视频| 久久69精品久久久久久久电影好 | www国产成人免费观看视频,深夜成人网 | 亚洲视频 欧美视频 | 日本网站免费观看 | 日韩成人在线电影 | 欧美成人手机视频 | 日韩国产中文字幕 | 久久久久久久av | 国产成人精品免高潮在线观看 | 久久国内 | 国产日产久久高清欧美一区 | 女女百合av大片一区二区三区九县 | 91亚洲一区 | 成人在线免费视频 | 嫩草网 | 亚洲精品一区二区三区蜜桃久 | 91中文字幕在线观看 |