欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java性能優(yōu)化四種常見垃圾收集器匯總

 更新時間:2022年07月08日 09:39:08   作者:??我犟不過你????  
這篇文章主要介紹了java性能優(yōu)化四種常見垃圾收集器匯總,每種垃圾收集器都有其不同的算法實現(xiàn)和步驟,下面我們簡單描述下我們常見的四種垃圾收集器的算法過程,感興趣的同學們最好先看下以下的兩篇文章去增加理解

前言

本篇文章我們來具體看看如何選擇合適的垃圾收集器。每種垃圾收集器都有其不同的算法實現(xiàn)和步驟,下面我們簡單描述下我們常見的四種垃圾收集器的算法過程,感興趣的同學們最好先看下以下的兩篇文章去增加理解。分別介紹了一些垃圾回收的基本概念,和各種垃圾回收器回收的過程,內容重復,本章不會在去單獨講解一遍。所以本章做一些歸納總結。

JVM GC 垃圾收集梳理總結

學習java一定要知道的垃圾收集器

常見的垃圾回收器和算法

相信大家可以通過我提供的另外兩個文章,學習到很多的垃圾回收器的相關知識。而我們真正需要關注,甚至可能使用到的垃圾收集器就是以下四種:

serial 串行垃圾收集器

如果是在client型的虛擬機或者在單核的服務器上,這種垃圾回收器將會成為默認的垃圾回收器。無論是Minor GC 還是 Full GC ,所有的應用線程都會暫停。在老年代當中使用的是Serial Old,同樣是單線程的老年代版本。

client型虛擬機,我們前面提到過編譯類型分為client和server,jvm會通過client編譯器(單線程)將代碼編譯成jvm識別的字節(jié)碼。

可以通過如下標志表示:

    -XX:+UseSerialGC

Parallel 多線程垃圾收集器

在server型虛擬機或多線程服務器上,jdk8默認使用的垃圾收集器類型。

無論是Minor GC還是Full GC都使用多線程的方式去回收垃圾,這兩種GC都會造成應用線程的暫停。但是它具有更多的吞吐量,是對于響應時間沒有過多要求情況下,最合適的垃圾回收器。

可以通過如下標志查看其狀態(tài):

年輕代:

-XX:+UseParallelGC

老年代:

-XX:+UseParallelOldGC

CMS 收集器

其設計初衷是為了減少serial和parallel收集器,在回收時造成的長時間的系統(tǒng)卡頓。

它在發(fā)生Minor GC時同樣會暫停所有的應用線程,不同之處在于,年輕代使用的不是parallel或者serial,而是使用一款專門適用于CMS的年輕代收集器ParNew。

可以通過下面的標志查看:

-XX:+UseParNewGC

CMS在發(fā)生Full GC時不再暫停全部應用線程,使用多線程的方式,和應用線程同時運行,清理不在使用的對象。這事得CMS垃圾收集器的停頓時間得到大大的降低。與Parellel收集器相比,極其明顯。

缺點

  • CMS需要占用較多的CPU資源,確保在應用線程運行時,gc線程不斷地掃描堆空間。
  • 不會對內存進行壓縮整理,導致內存碎片化。

如果沒有足夠的CPU資源,或者內存碎片化達到極限,將會退化成serial收集器。

可以通過下面的標志查看:

-XX:+UseConcMarkSweepGC

G1 收集器

也可以稱作垃圾優(yōu)先收集器(garbage first)。

設計初衷是為了盡量減少處理超大堆(4gb)時發(fā)生的卡頓。G1仍然屬于分代收集器,但是不同之處是它是邏輯分代。G1將堆空間劃分成若干個區(qū)域(Region),新生代的垃圾收集依然采用暫停所有應用線程的方式,將存活對象拷貝到老年代或者Survivor空間。老年代也分成很多區(qū)域,G1收集器通過將對象從一個區(qū)域復制到另外一個區(qū)域,完成了清理工作。這樣就解決了CMS中的內存碎片問題。

與CMS相同,G1也屬于concurrent收集器,在老年代發(fā)生Full GC時,由后臺線程完成回收工作,不需要暫停應用線程。

通過下面的標志查看:

-XX:+UseG1GC

其實上面的內容都是簡單描述,真正的實現(xiàn)細節(jié)請看開篇提供的文章。

顯式垃圾收集

這里說的顯式的垃圾收集,其實指的是手動觸發(fā)的垃圾回收,如下所示:

System.gc;

這是一種可以認為控制,讓jvm發(fā)生強制gc的方式。無論什么時候,都是不建議使用這種方式進行垃圾回收。

當你使用這條指定,不論是何種垃圾收集器,哪怕是CMS或G1也會發(fā)生Full GC,同時停止全部的應用線程,會卡頓相當長的一段時間。

例外情況:

  • 性能分析、測試
  • 堆分析

在上述情況,調用System.gc將能更好的幫助我們分析當前應用存在的問題。

到此這篇關于java性能優(yōu)化四種常見垃圾收集器匯總的文章就介紹到這了,更多相關java垃圾收集器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java獲取一維數(shù)組的最小值實現(xiàn)方法

    Java獲取一維數(shù)組的最小值實現(xiàn)方法

    這篇文章主要介紹了Java獲取一維數(shù)組的最小值實現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • spring的pointcut正則表達式的實現(xiàn)

    spring的pointcut正則表達式的實現(xiàn)

    本文主要介紹了spring的pointcut正則表達式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Freemarker中的3種循環(huán)模式

    Freemarker中的3種循環(huán)模式

    這篇文章主要介紹了Freemarker中的3種循環(huán)模式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MybatisPlus結合groupby實現(xiàn)分組和sum求和的步驟

    MybatisPlus結合groupby實現(xiàn)分組和sum求和的步驟

    這篇文章主要介紹了MybatisPlus結合groupby實現(xiàn)分組和sum求和的步驟,這次使用的是LambdaQueryWrapper,使用QueryWrapper相對來說簡單點就不寫了,本文分步驟給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2023-12-12
  • JDK動態(tài)代理過程原理及手寫實現(xiàn)詳解

    JDK動態(tài)代理過程原理及手寫實現(xiàn)詳解

    這篇文章主要為大家介紹了JDK動態(tài)代理過程原理及手寫實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Spring Boot 啟動注解過程分析

    Spring Boot 啟動注解過程分析

    這篇文章主要為大家介紹了Spring Boot 啟動注解過程示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Java實現(xiàn)占位符名稱替換值

    Java實現(xiàn)占位符名稱替換值

    占位符現(xiàn)在應該說是比較流行的動態(tài)賦值,本文主要介紹了Java占位符名稱替換值,根據(jù)一串帶著參數(shù)名占位符的url,替換掉對應參數(shù)名的值,感興趣的可以了解一下
    2021-07-07
  • SpringMVC?RESTFul實體類創(chuàng)建及環(huán)境搭建

    SpringMVC?RESTFul實體類創(chuàng)建及環(huán)境搭建

    這篇文章主要為大家介紹了SpringMVC?RESTFul實體類創(chuàng)建及環(huán)境搭建詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • spring的13個經典面試題

    spring的13個經典面試題

    Spring框架是一個開放源代碼的J2EE應用程序框架,是針對bean的生命周期進行管理的輕量級容Spring解決了開發(fā)者在J2EE開發(fā)中遇到的許多常見的問題,我們這篇文章就來了解一下spring的面試題
    2021-06-06
  • 解決JavaWeb讀取本地json文件以及亂碼的問題

    解決JavaWeb讀取本地json文件以及亂碼的問題

    今天小編就為大家分享一篇解決JavaWeb讀取本地json文件以及亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論