日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM调优总结(4):分代垃圾回收

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM调优总结(4):分代垃圾回收 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文出處:?pengjiaheng

為什么要分代

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

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

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

如何分代

如圖所示:

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

年輕代:

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

年老代:

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

持久代:

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

什么情況下觸發垃圾回收

由于對象進行了分代處理,因此垃圾回收區域、時間也不一樣。GC有兩種類型:Scavenge GCFull 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:

· 年老代(Tenured)被寫滿

· 持久代(Perm)被寫滿

· System.gc()被顯示調用

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

分代垃圾回收流程示意

選擇合適的垃圾收集算法

串行收集器

用單線程處理所有垃圾回收工作,因為無需多線程交互,所以效率比較高。但是,也無法使用多處理器的優勢,所以此收集器適合單處理器機器。當然,此收集器也可以用在小數據量(100M左右)情況下的多處理器機器上。可以使用-XX:+UseSerialGC打開。

并行收集器

對年輕代進行并行垃圾回收,因此可以減少垃圾回收時間。一般在多線程多處理器機器上使用。使用-XX:+UseParallelGC.打開。并行收集器在J2SE5.0第六6更新上引入,在Java SE6.0中進行了增強–可以對年老代進行并行收集。如果年老代不使用并發收集的話,默認是使用單線程進行垃圾回收,因此會制約擴展能力。使用-XX:+UseParallelOldGC打開。

使用-XX:ParallelGCThreads=<N>設置并行垃圾回收的線程數。此值可以設置與機器處理器數量相等。

此收集器可以進行如下配置:

最大垃圾回收暫停:指定垃圾回收時的最長暫停時間,通過-XX:MaxGCPauseMillis=<N>指定。<N>為毫秒.如果指定了此值的話,堆大小和垃圾回收相關參數會進行調整以達到指定值。設定此值可能會減少應用的吞吐量。

吞吐量:吞吐量為垃圾回收時間與非垃圾回收時間的比值,通過-XX:GCTimeRatio=<N>來設定,公式為1/(1+N)。例如,-XX:GCTimeRatio=19時,表示5%的時間用于垃圾回收。默認情況為99,即1%的時間用于垃圾回收。?

并發收集器

可以保證大部分工作都并發進行(應用不停止),垃圾回收只暫停很少的時間,此收集器適合對響應時間要求比較高的中、大規模應用。使用-XX:+UseConcMarkSweepGC打開。

并發收集器主要減少年老代的暫停時間,他在應用不停止的情況下使用獨立的垃圾回收線程,跟蹤可達對象。在每個年老代垃圾回收周期中,在收集初期并發收集器 會對整個應用進行簡短的暫停,在收集中還會再暫停一次。第二次暫停會比第一次稍長,在此過程中多個線程同時進行垃圾回收工作。

并發收集器使用處理器換來短暫的停頓時間。在一個N個處理器的系統上,并發收集部分使用K/N個可用處理器進行回收,一般情況下1<=K<=N/4。

在只有一個處理器的主機上使用并發收集器,設置為incremental mode模式也可獲得較短的停頓時間。

浮動垃圾:由于在應用運行的同時進行垃圾回收,所以有些垃圾可能在垃圾回收進行完成時產生,這樣就造成了“Floating Garbage”,這些垃圾需要在下次垃圾回收周期時才能回收掉。所以,并發收集器一般需要20%的預留空間用于這些浮動垃圾。

Concurrent Mode Failure:并發收集器在應用運行時進行收集,所以需要保證堆在垃圾回收的這段時間有足夠的空間供程序使用,否則,垃圾回收還未完成,堆空間先滿了。這種情況下將會發生“并發模式失敗”,此時整個應用將會暫停,進行垃圾回收。

啟動并發收集器:因為并發收集在應用運行時進行收集,所以必須保證收集完成之前有足夠的內存空間供程序使用,否則會出現“Concurrent Mode Failure”。通過設置-XX:CMSInitiatingOccupancyFraction=<N>指定還有多少剩余堆時開始執行并發收集

小結

串行處理器:

–適用情況:數據量比較小(100M左右);單處理器下并且對響應時間無要求的應用。
–缺點:只能用于小型應用

并行處理器:

–適用情況:“對吞吐量有高要求”,多CPU、對應用響應時間無要求的中、大型應用。舉例:后臺處理、科學計算。
–缺點:垃圾收集過程中應用響應時間可能加長

并發處理器:

–適用情況:“對響應時間有高要求”,多CPU、對應用響應時間有較高要求的中、大型應用。舉例:Web服務器/應用服務器、電信交換、集成開發環境。

本系列:

  • JVM調優總結(1):一些概念
  • JVM調優總結(2):基本垃圾回收算法
  • JVM調優總結(3):垃圾回收面臨的問題
  • JVM調優總結(4):分代垃圾回收
from:?http://www.importnew.com/19255.html

總結

以上是生活随笔為你收集整理的JVM调优总结(4):分代垃圾回收的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久草91 | 99久久人妻精品免费二区 | 欧美一级一区二区三区 | 极品白嫩少妇无套内谢 | va视频在线| aaaa黄色片 | 91亚洲天堂 | 亚洲性欧美色 | 亚洲精品一区二区三区四区 | av作品在线观看 | 日韩欧美亚洲 | 亚洲精品另类 | 一区二区三区激情 | 在线免费观看av不卡 | 婷婷色在线视频 | jizzjizz日本免费视频 | 手机在线看片1024 | 天天射天天干天天舔 | 久久久久久激情 | 美女三级网站 | 成年人看的羞羞网站 | www.毛片com | 亚洲精品久久久久久宅男 | 性日韩| 日本在线观看一区二区三区 | 毛片免费在线观看视频 | 在线色亚洲 | 久久中文字 | 免费日本黄色 | 男人插女人网站 | 亚洲av人无码激艳猛片服务器 | 精品婷婷 | 巨茎人妖videos另类 | 欧美性免费 | 爱情岛亚洲论坛入口福利 | 久久综合九色综合网站 | 久久大综合 | 激情三级在线 | av成人免费在线观看 | 女儿的朋友在线播放 | 久久二区三区 | 日韩久久精品电影 | 中文字幕高清一区 | 91久久色| 欧美变态口味重另类在线视频 | 免播放器av| av久操| 国产69精品久久久久久久 | 亚洲女优一区 | aaaa视频| 国产精品人妻 | 日韩精品亚洲一区 | 欧美性啪啪 | 日日夜夜撸啊撸 | 国产成人日韩 | 成人在线播放网站 | 国产一级淫 | 一区二区男女 | www.亚洲一区二区三区 | 亚洲com | 欧美第一页浮力影院 | 日韩三区在线 | 亚洲视频你懂的 | 性做久久久久久免费观看欧美 | 中文字幕观看在线 | 精品视频不卡 | 色偷偷久久 | 一区二区三区成人 | 亚洲三级影视 | 中文字幕第99页 | 激情小说视频在线 | 国产主播精品在线 | 亚洲a在线播放 | 亚洲视频手机在线观看 | 九九免费| 日韩国产精品久久 | 女女爱爱视频 | 五月婷婷开心中文字幕 | 亚洲精品一区二区三区四区乱码 | 激情亚洲网 | 亚洲国产日韩欧美在线观看 | 草草在线影院 | 黄色字幕网 | 黑花全肉高h湿play短篇 | 91操碰| 中文字幕韩日 | 二区三区在线观看 | 日韩性xxxx| 四虎成人影视 | 日韩一级欧美一级 | 国产中文字幕免费 | 黄色影音 | 男男h黄动漫啪啪无遮挡软件 | 亚洲精品久久久久久久蜜桃 | 天天综合在线观看 | 日韩操比| 国产午夜视频在线观看 | 性a视频 | 国产乱子伦农村叉叉叉 |