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

JVM基礎:解析JVM分代垃圾回收策略

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

由于不同對象的生命周期不一樣,因此在JVM的垃圾回收策略中有分代這一策略。本文介紹了JVM分代垃圾回收策略的目標,如何分代,以及垃圾回收的觸發因素。

JVM分代垃圾回收策略的基礎概念

為什么要分代

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

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

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

如何分代

  如圖所示:

JVM分代垃圾回收


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

       年輕代:

  所有新生成的對象首先都是放在年輕代的。年輕代的目標就是盡可能快速的收集掉那些生命周期短的對象。年輕代分三個區。一個Eden區,兩個Survivor區(一般而言)。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被復制到Survivor區(兩個中的一個),當這個Survivor區滿時,此區的存活對象將被復制到另外一個Survivor區,當這個Survivor去也滿了的時候,從***個Survivor區復制過來的并且此時還存活的對象,將被復制“年老區(Tenured)”。需要注意,Survivor的兩個區是對稱的,沒先后關系,所以同一個區中可能同時存在從Eden復制過來對象,和從前一個Survivor復制過來的對象,而復制到年老區的只有從***個Survivor去過來的對象。而且,Survivor區總有一個是空的。同時,根據程序需要,Survivor區是可以配置為多個的(多于兩個),這樣可以增加對象在年輕代中的存在時間,減少被放到年老代的可能。

  年老代:

  在年輕代中經歷了N次垃圾回收后仍然存活的對象,就會被放到年老代中。因此,可以認為年老代中存放的都是一些生命周期較長的對象。

  持久代:

  用于存放靜態文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者調用一些class,例如Hibernate等,在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類。持久代大小通過-XX:MaxPermSize=進行設置。

  什么情況下觸發JVM分代垃圾回收

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

  ScavengeGC

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

  FullGC

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

  ◆年老代(Tenured)被寫滿

  ◆持久代(Perm)被寫滿

  ◆System.gc()被顯示調用

  ◆上一次GC之后Heap的各域分配策略動態變化

【編輯推薦】

  1. 圖解JVM分代垃圾回收流程與算法的選擇
  2. JVM分代垃圾回收策略的基礎概念
  3. 巧解Tomcat中JVM內存溢出問題
  4. 新一代JVM垃圾回收算法出爐
  5. 揭露JDK,JRE,JVM三者不為人知的隱情

 

 

責任編輯:佚名 來源: java.chinaitlab.com
相關推薦

2011-12-05 12:51:58

JVMJava

2010-01-06 09:28:08

JVM分代垃圾回收

2017-04-25 14:39:55

JVM內存Java

2021-11-05 15:23:20

JVM回收算法

2012-01-10 11:19:35

JavaJVM

2010-01-14 11:28:54

JVM分代垃圾回收

2010-09-26 13:29:46

JVM垃圾回收

2023-08-08 10:29:55

JVM優化垃圾回收

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2010-02-22 08:58:35

JVM內存模型垃圾收集

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2009-12-30 10:14:29

JVM垃圾回收

2010-09-25 15:33:19

JVM垃圾回收

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2022-06-22 09:54:45

JVM垃圾回收Java

2022-06-10 07:13:29

JVM垃圾回收

2010-09-16 15:10:24

JVM垃圾回收機制

2010-09-25 15:26:12

JVM垃圾回收

2023-08-27 21:29:43

JVMFullGC調優
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品视频网 | 久久天堂网 | 黑色丝袜三级在线播放 | 精品在线播放 | 在线视频日韩 | 日韩一区二区在线播放 | 国产成人精品一区二三区在线观看 | 免费特级黄毛片 | 99精品欧美一区二区蜜桃免费 | 综合久久99| 国产精品久久久久婷婷二区次 | 欧美色欧美亚洲另类七区 | 99久久婷婷国产综合精品首页 | 国产成人精品免高潮在线观看 | 久久一区二区视频 | 亚洲高清免费视频 | 成人在线视频免费看 | 国内精品视频一区二区三区 | 色视频在线播放 | 日韩有码一区 | 日韩中文字幕网 | 久久综合伊人 | 在线视频一区二区三区 | 高清久久久 | 精品国产91久久久久久 | 2020亚洲天堂 | 精品欧美一区二区三区久久久 | 亚洲喷水 | 中文字幕日韩欧美一区二区三区 | 欧美三区在线观看 | 超碰97免费观看 | xxx视频| 亚洲一区二区三区在线播放 | 爱爱小视频 | 福利视频大全 | 欧美在线精品一区 | 亚洲国产免费 | 国产蜜臀97一区二区三区 | 超碰3| 毛片视频观看 | 亚洲精品4 |