成人免费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

2017-04-25 14:39:55

JVM內存Java

2024-08-26 08:58:50

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技術棧公眾號

主站蜘蛛池模板: 91免费福利在线 | 美女天天干天天操 | 久久精品国产清自在天天线 | 国产综合区 | 91亚洲国产成人久久精品网站 | 成人高清在线 | 老司机67194精品线观看 | 午夜在线影院 | 亚洲精品久久久久久久久久吃药 | 午夜精品一区二区三区在线视频 | 久久国产精品无码网站 | 免费高潮视频95在线观看网站 | 插插插干干干 | 99国内精品久久久久久久 | 91精品www | 久久精品中文字幕 | 亚洲一区二区三区在线 | 亚洲一区二区免费 | 中文字幕一区二区三区日韩精品 | 中文字幕国 | 啪一啪 | 91精品国产乱码久久蜜臀 | 日韩中文字幕视频在线 | 日韩欧美亚洲 | 在线免费观看一区二区 | 日韩高清中文字幕 | 天久久| 日本精品在线一区 | 国产日韩欧美在线 | 免费一级大片 | 成人免费视频网站在线观看 | 高清黄色网址 | 精品无码久久久久国产 | 国产中的精品av涩差av | 中文字幕av色 | 毛片网站在线观看 | 亚洲区在线| 成人在线播放网站 | 国产午夜精品一区二区三区四区 | 99re99 | 久久这里只有精品首页 |