亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡(jiǎn)單了解Java垃圾回收器的種類

 更新時(shí)間:2017年12月14日 15:14:46   投稿:mengwei  
這篇文章主要介紹了簡(jiǎn)單了解Java垃圾回收器的種類,具有一定借鑒價(jià)值,需要的朋友可以參考下。

在這篇教程中我們將學(xué)習(xí)幾種現(xiàn)有的垃圾回收器。在Java中,垃圾回收是一個(gè)自動(dòng)的進(jìn)程可以替代程序員進(jìn)行內(nèi)存的分配與回收這些復(fù)雜的工作。這篇是垃圾回 收教程系列的第三篇,在前面的第2部分我們看到了在Java中垃圾回收是如何工作的,那是篇有意思的文章,我推薦你去看一下。第一部分介紹了Java的垃圾回收,主要有JVM體系結(jié)構(gòu),堆內(nèi)存模型和一些Java術(shù)語(yǔ)。

Java有四種類型的垃圾回收器:

串行垃圾回收器(Serial Garbage Collector)
并行垃圾回收器(Parallel Garbage Collector)
并發(fā)標(biāo)記掃描垃圾回收器(CMS Garbage Collector)
G1垃圾回收器(G1 Garbage Collector)

每種類型都有自己的優(yōu)勢(shì)與劣勢(shì)。重要的是,我們編程的時(shí)候可以通過(guò)JVM選擇垃圾回收器類型。我們通過(guò)向JVM傳遞參數(shù)進(jìn)行選擇。每種類型在很大程度上有所不同并且可以為我們提供完全不同的應(yīng)用程序性能。理解每種類型的垃圾回收器并且根據(jù)應(yīng)用程序選擇進(jìn)行正確的選擇是非常重要的。

1、串行垃圾回收器

串行垃圾回收器通過(guò)持有應(yīng)用程序所有的線程進(jìn)行工作。它為單線程環(huán)境設(shè)計(jì),只使用一個(gè)單獨(dú)的線程進(jìn)行垃圾回收,通過(guò)凍結(jié)所有應(yīng)用程序線程進(jìn)行工作,所以可能不適合服務(wù)器環(huán)境。它最適合的是簡(jiǎn)單的命令行程序。

通過(guò)JVM參數(shù)-XX:+UseSerialGC可以使用串行垃圾回收器。

2、并行垃圾回收器

并行垃圾回收器也叫做throughputcollector。它是JVM的默認(rèn)垃圾回收器。與串行垃圾回收器不同,它使用多線程進(jìn)行垃圾回收。相似的是,它也會(huì)凍結(jié)所有的應(yīng)用程序線程當(dāng)執(zhí)行垃圾回收的時(shí)候

3、并發(fā)標(biāo)記掃描垃圾回收器

并發(fā)標(biāo)記垃圾回收使用多線程掃描堆內(nèi)存,標(biāo)記需要清理的實(shí)例并且清理被標(biāo)記過(guò)的實(shí)例。并發(fā)標(biāo)記垃圾回收器只會(huì)在下面兩種情況持有應(yīng)用程序所有線程。

當(dāng)標(biāo)記的引用對(duì)象在tenured區(qū)域;

在進(jìn)行垃圾回收的時(shí)候,堆內(nèi)存的數(shù)據(jù)被并發(fā)的改變。

相比并行垃圾回收器,并發(fā)標(biāo)記掃描垃圾回收器使用更多的CPU來(lái)確保程序的吞吐量。如果我們可以為了更好的程序性能分配更多的CPU,那么并發(fā)標(biāo)記上掃描垃圾回收器是更好的選擇相比并發(fā)垃圾回收器。

通過(guò)JVM參數(shù)XX:+USeParNewGC打開并發(fā)標(biāo)記掃描垃圾回收器。

4、G1垃圾回收器

G1垃圾回收器適用于堆內(nèi)存很大的情況,他將堆內(nèi)存分割成不同的區(qū)域,并且并發(fā)的對(duì)其進(jìn)行垃圾回收。G1也可以在回收內(nèi)存之后對(duì)剩余的堆內(nèi)存空間進(jìn)行壓縮。并發(fā)掃描標(biāo)記垃圾回收器在STW情況下壓縮內(nèi)存。G1垃圾回收會(huì)優(yōu)先選擇第一塊垃圾最多的區(qū)域

通過(guò)JVM參數(shù)–XX:+UseG1GC使用G1垃圾回收器

Java8的新特性

在使用G1垃圾回收器的時(shí)候,通過(guò)JVM參數(shù)-XX:+UseStringDeduplication。我們可以通過(guò)刪除重復(fù)的字符串,只保留一個(gè)char[]來(lái)優(yōu)化堆內(nèi)存。這個(gè)選擇在Java8u20被引入。

我們給出了全部的四種Java垃圾回收器,需要根據(jù)應(yīng)用場(chǎng)景,硬件性能和吞吐量需求來(lái)決定使用哪一種。

垃圾回收的JVM配置

下面的JVM關(guān)鍵配置都與Java垃圾回收有關(guān)。

運(yùn)行的垃圾回收器類型

配置 描述
-XX:+UseSerialGC 串行垃圾回收器
-XX:+UseParallelGC 并行垃圾回收器
-XX:+UseConcMarkSweepGC 并發(fā)標(biāo)記掃描垃圾回收器
-XX:ParallelCMSThreads= 并發(fā)標(biāo)記掃描垃圾回收器 =為使用的線程數(shù)量
-XX:+UseG1GC G1垃圾回收器

GC的優(yōu)化配置

配置 描述
-Xms 初始化堆內(nèi)存大小
-Xmx 堆內(nèi)存最大值
-Xmn 新生代大小
-XX:PermSize 初始化永久代大小
-XX:MaxPermSize 永久代最大容量

使用JVM GC參數(shù)的例子

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar

總結(jié)

以上就是本文關(guān)于簡(jiǎn)單了解Java垃圾回收器的種類的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Java多線程并發(fā)編程(互斥鎖Reentrant Lock)

    Java多線程并發(fā)編程(互斥鎖Reentrant Lock)

    這篇文章主要介紹了ReentrantLock 互斥鎖,在同一時(shí)間只能被一個(gè)線程所占有,在被持有后并未釋放之前,其他線程若想獲得該鎖只能等待或放棄,需要的朋友可以參考下
    2017-05-05
  • Maven如何打入依賴中指定的部分jar包

    Maven如何打入依賴中指定的部分jar包

    當(dāng)項(xiàng)目運(yùn)行的環(huán)境里已經(jīng)有一個(gè)jar包是pom文件依賴其他項(xiàng)目的jar包,所以最后得到的項(xiàng)目jar包中還需要打入其他項(xiàng)目的最新代碼,接下來(lái)通過(guò)本文給大家介紹Maven打入依賴jar包的操作工程,需要的朋友參考下吧
    2021-06-06
  • Graphics2D 寫圖片中文亂碼問(wèn)題及解決

    Graphics2D 寫圖片中文亂碼問(wèn)題及解決

    這篇文章主要介紹了Graphics2D 寫圖片中文亂碼問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出

    淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出

    這篇文章主要介紹了淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • spring5 SAXParseException:cvc-elt.1: 找不到元素“beans 的聲明詳解

    spring5 SAXParseException:cvc-elt.1: 找不到元素“beans 的聲明詳解

    這篇文章主要給大家介紹了關(guān)于spring5 SAXParseException:cvc-elt.1: 找不到元素“beans 聲明的相關(guān)資料,需要的朋友可以參考下
    2020-08-08
  • SpringBoot整合MinIO實(shí)現(xiàn)文件上傳的方法詳解

    SpringBoot整合MinIO實(shí)現(xiàn)文件上傳的方法詳解

    一般涉及到文件上傳,基本上都是保存在項(xiàng)目本地,這種方式比較省事,但是安全性不高。所以今天給大伙詳細(xì)介紹一些如何利用MinIO實(shí)現(xiàn)文件上傳,感興趣的可以了解一下
    2022-05-05
  • Spring Boot Debug調(diào)試過(guò)程圖解

    Spring Boot Debug調(diào)試過(guò)程圖解

    這篇文章主要介紹了Spring Boot Debug調(diào)試過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Mybatis的幾種傳參方式詳解

    Mybatis的幾種傳參方式詳解

    這篇文章主要介紹了Mybatis的幾種傳參方式詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之圖(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java數(shù)據(jù)結(jié)構(gòu)之圖(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    本文章主要講解學(xué)習(xí)如何使用JAVA語(yǔ)言以鄰接表的方式實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)---圖(Graph)。對(duì)java數(shù)據(jù)結(jié)構(gòu)之圖相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2017-04-04
  • Java JDK 二分法 分析demo(推薦)

    Java JDK 二分法 分析demo(推薦)

    下面小編就為大家?guī)?lái)一篇Java JDK 二分法 分析demo(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07

最新評(píng)論