www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]一文了解JVM發(fā)展史!

文章目錄

  • JVM發(fā)展史

  • 一,歷代JDK新特性介紹


    • 1996年 SUN JDK 1.0 Classic VM

    • 1997年 JDK1.1 發(fā)布

    • 1998年 JDK1.2 Solaris Exact VM

    • 2000年 JDK 1.3 Hotspot 作為默認(rèn)虛擬機(jī)發(fā)布

    • 2002年 JDK 1.4 Classic VM退出歷史舞臺(tái)

    • 2004年發(fā)布 JDK1.5 即 JDK5 、J2SE 5 、Java 5

    • 2006年發(fā)布JDK1.6既JDK6

    • 2011年 JDK7發(fā)布

    • 2014年 JDK8發(fā)布

    • 2016年JDK9

    • 2018年JDK10

    • 2018年JDK11

    • 2019年JDK12

    • 2019年JDK13

    • 2020年發(fā)布JDK14

  • JVM運(yùn)行機(jī)制

  • JVM模型


    • 圖解:

    • PC寄存器

    • 方法區(qū)

    • Java堆(新生代,老年代,持久代)

    • Matespace元數(shù)據(jù)區(qū)(jdk1.8新特性)

    • Java棧

    • 棧、堆、方法區(qū)交互

  • JVM參數(shù)


    • 1,堆設(shè)置

    • 2,收集器設(shè)置

    • 3,垃圾回收統(tǒng)計(jì)信息

    • 4,并行收集器設(shè)置

    • 5,并發(fā)收集器設(shè)置

    • 參數(shù)介紹


    • 參數(shù)設(shè)置(案例)

  • GC


    • 引用計(jì)數(shù)

    • 正向可達(dá)

    • 串行收集器

    • 并行收集器


    • GC參數(shù)整理

    • CMS運(yùn)行過(guò)程比較復(fù)雜,著重實(shí)現(xiàn)了標(biāo)記的過(guò)程,可分為

    • 特點(diǎn)

    • ParNew

    • Parallel收集器

    • -XX:MaxGCPauseMills

    • -XX:GCTimeRatio

    • CMS收集器


    • GC的概念

    • GC參數(shù)


    • GC算法與種類(lèi)

    • 如何判斷對(duì)象是否可回收?


    • JVM監(jiān)控工具


JVM發(fā)展史

一,歷代JDK新特性介紹

1996年 SUN JDK 1.0 Classic VM

初代版本,偉大的一個(gè)里程碑,但是是純解釋運(yùn)行,使用外掛JIT,性能比較差,運(yùn)行速度慢。

1997年 JDK1.1 發(fā)布

AWT、內(nèi)部類(lèi)、JDBC、RMI、反射

1998年 JDK1.2 Solaris Exact VM

JIT 解釋器混合
Accurate Memory Management 精確內(nèi)存管理,數(shù)據(jù)類(lèi)型敏感
提升的GC性能
JDK1.2開(kāi)始 稱為Java 2 J2SE J2EE J2ME 的出現(xiàn)
加入Swing Collections

2000年 JDK 1.3 Hotspot 作為默認(rèn)虛擬機(jī)發(fā)布

加入JavaSound

2002年 JDK 1.4 Classic VM退出歷史舞臺(tái)

Assert 正則表達(dá)式 NIO IPV6 日志API 加密類(lèi)庫(kù)

2004年發(fā)布 JDK1.5 即 JDK5 、J2SE 5 、Java 5

自動(dòng)裝箱拆箱
泛型支持
元數(shù)據(jù)(注解)
Introspector(內(nèi)?。?br style="box-sizing: border-box;outline: 0px;overflow-wrap: break-word;">enum(枚舉)
靜態(tài)引入
可變長(zhǎng)參數(shù)(Varargs)
foreach(高級(jí)虛幻)
JMM(內(nèi)存模型)
concurrent(并發(fā)包)

2006年發(fā)布JDK1.6既JDK6

命名方式變更
腳本語(yǔ)言
編譯API和微型HTTP服務(wù)器API
鎖與同步
垃圾收集
類(lèi)加載
JDBC 4.0(jdbc高級(jí))
Java Compiler (Java? 編程語(yǔ)言編譯器的接口)
可插拔注解
Native PKI(公鑰基礎(chǔ)設(shè))
Java GSS (通用安全服務(wù))
Kerberos ( 一種安全認(rèn)證的系統(tǒng))
LDAP (LDAP )
Web Services (web服務(wù)即xml傳輸)

2011年 JDK7發(fā)布

switch語(yǔ)句塊中允許以字符串作為分支條件
創(chuàng)建泛型對(duì)象時(shí)應(yīng)用類(lèi)型推斷
try-with-resources(一個(gè)語(yǔ)句塊中捕獲多種異常)
null值得自動(dòng)處理
數(shù)值類(lèi)型可以用二進(jìn)制字符串表示
引入Java NIO.2開(kāi)發(fā)包
動(dòng)態(tài)語(yǔ)言支持
安全的加減乘除
Map集合支持并發(fā)請(qǐng)求

2014年 JDK8發(fā)布

引入Lambda 表達(dá)式
管道和流
新的日期和時(shí)間 API(加強(qiáng)對(duì)日期與時(shí)間的處理)
默認(rèn)的方法(接口可以編寫(xiě)默認(rèn)的方法)
類(lèi)型注解
Nashorn javascript引擎(允許java運(yùn)行特定JavaScript代碼)
Optional class (處理nullPointException)
并行累加器
并行操作
內(nèi)存錯(cuò)誤移除
TLS SNI 服務(wù)器名稱標(biāo)識(shí)(Server Name Identification)

2016年JDK9

模塊化
接口支持編寫(xiě)私有方法
Javadoc改進(jìn)(支持符合html5 標(biāo)準(zhǔn)輸出)
Stream API 增強(qiáng)(簡(jiǎn)化調(diào)用、操作、提供常用便捷的方法)
image API增強(qiáng)(支持多分辨率解析)
多版本jar支持(在不同環(huán)境運(yùn)行不同jar包)
改進(jìn)棄用注解使用@Deprecated
內(nèi)置輕量級(jí)json API
棄用Applet API
Deprecation的棄用

2018年JDK10

JEP286,var 局部變量類(lèi)型推斷。
JEP296,將原來(lái)用 Mercurial 管理的眾多 JDK 倉(cāng)庫(kù)代碼,合并到一個(gè)倉(cāng)庫(kù)中,簡(jiǎn)化開(kāi)發(fā)和管理過(guò)程。
JEP304,統(tǒng)一的垃圾回收接口。
JEP307,G1 垃圾回收器的并行完整垃圾回收,實(shí)現(xiàn)并行性來(lái)改善最壞情況下的延遲。
JEP310,應(yīng)用程序類(lèi)數(shù)據(jù) (AppCDS) 共享,通過(guò)跨進(jìn)程共享通用類(lèi)元數(shù)據(jù)來(lái)減少內(nèi)存占用空間,和減少啟動(dòng)時(shí)間。
JEP312,ThreadLocal 握手交互。在不進(jìn)入到全局 JVM 安全點(diǎn) (Safepoint) 的情況下,對(duì)線程執(zhí)行回調(diào)。優(yōu)化可以只停止單個(gè)線程,而不是停全部線程或一個(gè)都不停。
JEP313,移除 JDK 中附帶的 javah 工具??梢允褂?javac -h 代替。
JEP314,使用附加的 Unicode 語(yǔ)言標(biāo)記擴(kuò)展。
JEP317,能將堆內(nèi)存占用分配給用戶指定的備用內(nèi)存設(shè)備。
JEP317,使用 Graal 基于 Java 的編譯器,可以預(yù)先把 Java 代碼編譯成本地代碼來(lái)提升效能。
JEP318,在 OpenJDK 中提供一組默認(rèn)的根證書(shū)頒發(fā)機(jī)構(gòu)證書(shū)。開(kāi)源目前 Oracle 提供的的 Java SE 的根證書(shū),這樣 OpenJDK 對(duì)開(kāi)發(fā)人員使用起來(lái)更方便。
JEP322,基于時(shí)間定義的發(fā)布版本,即上述提到的發(fā)布周期。版本號(hào)為$FEATURE.$INTERIM.$UPDATE.$PATCH,分j別是大版本,中間版本,升級(jí)包和補(bǔ)丁版本。

2018年JDK11

新特性及更新修改:
基于嵌套的訪問(wèn)控制
標(biāo)準(zhǔn) HTTP Client 升級(jí)
Epsilon:低開(kāi)銷(xiāo)垃圾回收器
簡(jiǎn)化啟動(dòng)單個(gè)源代碼文件的方法
用于 Lambda 參數(shù)的局部變量語(yǔ)法
低開(kāi)銷(xiāo)的 Heap Profiling
支持 TLS 1.3 協(xié)議
ZGC:可伸縮低延遲垃圾收集器
飛行記錄器
動(dòng)態(tài)類(lèi)文件常量

2019年JDK12

Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 低暫停時(shí)間的GC
Microbenchmark Suite 微基準(zhǔn)測(cè)試套件
Switch Expressions (Preview) Switch表達(dá)式
JVM Constants API JVM常量API
One AArch64 Port, Not Two 只保留一個(gè)AArch64實(shí)現(xiàn)
Default CDS Archives 默認(rèn)類(lèi)數(shù)據(jù)共享歸檔文件
Abortable Mixed Collections for G1 可中止的G1 Mixed GC
Promptly Return Unused Committed Memory from G1 G1及時(shí)返回未使用的已分配內(nèi)存

2019年JDK13

JEP 350,Dynamic CDS Archives
擴(kuò)展應(yīng)用程序類(lèi)-數(shù)據(jù)共享,以允許在 Java 應(yīng)用程序執(zhí)行結(jié)束時(shí)動(dòng)態(tài)歸檔類(lèi)。歸檔類(lèi)將包括默認(rèn)的基礎(chǔ)層 CDS(class data-sharing)存檔中不存在的所有已加載的應(yīng)用程序類(lèi)和庫(kù)類(lèi)。

JEP 351,ZGC: Uncommit Unused Memory
增強(qiáng) ZGC 以將未使用的堆內(nèi)存返回給操作系統(tǒng)。

JEP 353,Reimplement the Legacy Socket API
使用易于維護(hù)和調(diào)試的更簡(jiǎn)單、更現(xiàn)代的實(shí)現(xiàn)替換 java.net.Socket 和java.net.ServerSocket API 使用的底層實(shí)現(xiàn)。

JEP 354,Switch Expressions (Preview)
可在生產(chǎn)環(huán)境中使用的 switch 表達(dá)式,JDK 13 中將帶來(lái)一個(gè) beta 版本實(shí)現(xiàn)。switch 表達(dá)式擴(kuò)展了 switch 語(yǔ)句,使其不僅可以作為語(yǔ)句(statement),還可以作為表達(dá)式(expression),并且兩種寫(xiě)法都可以使用傳統(tǒng)的 switch 語(yǔ)法,或者使用簡(jiǎn)化的“case L ->”模式匹配語(yǔ)法作用于不同范圍并控制執(zhí)行流。這些更改將簡(jiǎn)化日常編碼工作,并為 switch 中的模式匹配(JEP 305)做好準(zhǔn)備。

JEP 355,Text Blocks (Preview)
將文本塊添加到 Java 語(yǔ)言。文本塊是一個(gè)多行字符串文字,它避免了對(duì)大多數(shù)轉(zhuǎn)義序列的需要,以可預(yù)測(cè)的方式自動(dòng)格式化字符串,并在需要時(shí)讓開(kāi)發(fā)人員控制格式。

2020年發(fā)布JDK14

305:instanceof的模式匹配(預(yù)覽)
343:包裝工具(培養(yǎng)箱)
345:G1的NUMA感知內(nèi)存分配
349:JFR事件流
352:非易失性映射字節(jié)緩沖區(qū)
358:有用的NullPointerExceptions
359:記錄(預(yù)覽)
361:開(kāi)關(guān)表達(dá)式(標(biāo)準(zhǔn))
362:棄用Solaris和SPARC端口
363:刪除并發(fā)標(biāo)記掃描(CMS)垃圾收集器
364:Mac OS上的ZGC
365:Windows上的ZGC
366:棄用ParallelScavenge + SerialOld GC組合
367:刪除Pack200工具和API
368:文本塊(第二預(yù)覽)
370:外部存儲(chǔ)器訪問(wèn)API(孵化器)

JVM運(yùn)行機(jī)制

一篇能漲薪水的JVM調(diào)優(yōu),分析文章

JVM模型

圖解:

一篇能漲薪水的JVM調(diào)優(yōu),分析文章

PC寄存器

每個(gè)線程擁有一個(gè)PC寄存器
在線程創(chuàng)建時(shí) 創(chuàng)建
指向下一條指令的地址
執(zhí)行本地方法時(shí),PC的值為undefined

方法區(qū)

  • 保存裝載的類(lèi)信息

    類(lèi)型的常量池
    字段,方法信息
    方法字節(jié)碼

  • 通常和永久區(qū)(Perm)關(guān)聯(lián)在一起

Java堆(新生代,老年代,持久代)

和程序開(kāi)發(fā)密切相關(guān)
應(yīng)用系統(tǒng)對(duì)象都保存在Java堆中
所有線程共享Java堆
對(duì)分代GC來(lái)說(shuō),堆也是分代的
GC的主要工作區(qū)間

Matespace元數(shù)據(jù)區(qū)(jdk1.8新特性)

從JDK8開(kāi)始,永久代(PermGen)的概念被廢棄掉了,取而代之的是一個(gè)稱為Metaspace的存儲(chǔ)空間。Metaspace使用的是本地內(nèi)存,而不是堆內(nèi)存,也就是說(shuō)在默認(rèn)情況下Metaspace的大小只與本地內(nèi)存大小有關(guān)。

  • -XX:MetaspaceSize=N

    這個(gè)參數(shù)是初始化的Metaspace大小,該值越大觸發(fā)Metaspace GC的時(shí)機(jī)就越晚。隨著GC的到來(lái),虛擬機(jī)會(huì)根據(jù)實(shí)際情況調(diào)控Metaspace的大小,可能增加上線也可能降低。在默認(rèn)情況下,這個(gè)值大小根據(jù)不同的平臺(tái)在12M到20M浮動(dòng)。使用java -XX:+PrintFlagsInitial命令查看本機(jī)的初始化參數(shù),-XX:Metaspacesize為21810376B(大約20.8M)。

  • -XX:MaxMetaspaceSize=N

    這個(gè)參數(shù)用于限制Metaspace增長(zhǎng)的上限,防止因?yàn)槟承┣闆r導(dǎo)致Metaspace無(wú)限的使用本地內(nèi)存,影響到其他程序。在本機(jī)上該參數(shù)的默認(rèn)值為4294967295B(大約4096MB)。

  • -XX:MinMetaspaceFreeRatio=N

    當(dāng)進(jìn)行過(guò)Metaspace GC之后,會(huì)計(jì)算當(dāng)前Metaspace的空閑空間比,如果空閑比小于這個(gè)參數(shù),那么虛擬機(jī)將增長(zhǎng)Metaspace的大小。在本機(jī)該參數(shù)的默認(rèn)值為40,也就是40%。設(shè)置該參數(shù)可以控制Metaspace的增長(zhǎng)的速度,太小的值會(huì)導(dǎo)致Metaspace增長(zhǎng)的緩慢,Metaspace的使用逐漸趨于飽和,可能會(huì)影響之后類(lèi)的加載。而太大的值會(huì)導(dǎo)致Metaspace增長(zhǎng)的過(guò)快,浪費(fèi)內(nèi)存。

  • -XX:MaxMetasaceFreeRatio=N

    當(dāng)進(jìn)行過(guò)Metaspace GC之后, 會(huì)計(jì)算當(dāng)前Metaspace的空閑空間比,如果空閑比大于這個(gè)參數(shù),那么虛擬機(jī)會(huì)釋放Metaspace的部分空間。在本機(jī)該參數(shù)的默認(rèn)值為70,也就是70%。

  • -XX:MaxMetaspaceExpansion=N

    Metaspace增長(zhǎng)時(shí)的最大幅度。在本機(jī)上該參數(shù)的默認(rèn)值為5452592B(大約為5MB)。

  • -XX:MinMetaspaceExpansion=N

    Metaspace增長(zhǎng)時(shí)的最小幅度。在本機(jī)上該參數(shù)的默認(rèn)值為340784B(大約330KB為)。

Java棧

線程私有
棧由一系列幀組成(因此Java棧也叫做幀棧)
幀保存一個(gè)方法的局部變量、操作數(shù)棧、常量池指針
每一次方法調(diào)用創(chuàng)建一個(gè)幀,并壓棧

棧、堆、方法區(qū)交互

一篇能漲薪水的JVM調(diào)優(yōu),分析文章
一篇能漲薪水的JVM調(diào)優(yōu),分析文章

JVM參數(shù)

參數(shù)介紹

-Xss 設(shè)置每個(gè)線程可使用的內(nèi)存大小,即棧的大小。

1,堆設(shè)置

-Xms 初始堆大小,默認(rèn)為物理內(nèi)存的1/64
-Xmx 最大堆大小,默認(rèn)為物理內(nèi)存的1/4
-Xmn 堆內(nèi)新生代的大小。通過(guò)這個(gè)值也可以得到老生代的大小:-Xmx減去-Xmn
-XX:NewSize=n 設(shè)置年輕代大小
-XX:NewRatio=n 設(shè)置年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3,年輕代占整個(gè)年輕代年老代和的1/4
-XX:SurvivorRatio=n 年輕代中Eden區(qū)與兩個(gè)Survivor區(qū)的比值。注意Survivor區(qū)有兩個(gè)。如:3,表示Eden:Survivor=3:2,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/5
-XX:MaxPermSize=n 設(shè)置持久代大小
-XX:MaxTenuringThreshold:設(shè)置轉(zhuǎn)入老年代的存活次數(shù)。如果是0,則直接跳過(guò)新生代進(jìn)入老年代
-XX:PermSize、-XX:MaxPermSize:分別設(shè)置永久代最小大小與最大大?。↗ava8以前,8以后被Matespace元數(shù)據(jù)區(qū)替代)

2,收集器設(shè)置

-XX:+UseSerialGC 設(shè)置串行收集器
-XX:+UseParallelGC 設(shè)置并行收集器
-XX:+UseParalledlOldGC 設(shè)置并行年老代收集器
-XX:+UseConcMarkSweepGC 設(shè)置并發(fā)收集器

3,垃圾回收統(tǒng)計(jì)信息

-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename

4,并行收集器設(shè)置

-XX:ParallelGCThreads=n 設(shè)置并行收集器收集時(shí)使用的CPU數(shù)。并行收集線程數(shù)。
-XX:MaxGCPauseMillis=n 設(shè)置并行收集最大暫停時(shí)間
-XX:GCTimeRatio=n 設(shè)置垃圾回收時(shí)間占程序運(yùn)行時(shí)間的百分比。公式為1/(1+n)

5,并發(fā)收集器設(shè)置

-XX:+CMSIncrementalMode 設(shè)置為增量模式。適用于單CPU情況。
-XX:ParallelGCThreads=n 設(shè)置并發(fā)收集器年輕代收集方式為并行收集時(shí),使用的CPU數(shù)。并行收集線程數(shù)。

參數(shù)設(shè)置(案例)

GC

GC的概念

Garbage Collection 垃圾收集
1960年 List 使用了GC
Java中,GC的對(duì)象是堆空間和永久區(qū)

GC參數(shù)

串行收集器

  • 最古老,最穩(wěn)定

  • 效率高

  • 可能會(huì)產(chǎn)生較長(zhǎng)的停頓

  • -XX:+UseSerialGC
    新生代、老年代使用串行回收
    新生代復(fù)制算法
    老年代標(biāo)記-壓縮

并行收集器

ParNew

  • -XX:+UseParNewGC
    新生代并行
    老年代串行

  • Serial收集器新生代的并行版本

  • 復(fù)制算法

  • 多線程,需要多核支持

  • -XX:ParallelGCThreads 限制線程數(shù)量

Parallel收集器

  • 類(lèi)似ParNew

  • 新生代復(fù)制算法

  • 老年代 標(biāo)記-壓縮

  • 更加關(guān)注吞吐量

  • -XX:+UseParallelGC
    使用Parallel收集器 + 老年代串行

  • -XX:+UseParallelOldGC
    使用Parallel收集器 + 并行老年代

-XX:MaxGCPauseMills

最大停頓時(shí)間,單位毫秒
GC盡力保證回收時(shí)間不超過(guò)設(shè)定值
  • 1

  • 2

-XX:GCTimeRatio

0-100的取值范圍
垃圾收集時(shí)間占總時(shí)間的比
默認(rèn)99,即最大允許1%時(shí)間做GC
這兩個(gè)參數(shù)是矛盾的。因?yàn)橥nD時(shí)間和吞吐量不可能同時(shí)調(diào)優(yōu)

CMS收集器

  • Concurrent Mark Sweep 并發(fā)(與用戶線程一起執(zhí)行 )標(biāo)記清除

  • 標(biāo)記-清除算法

  • 與標(biāo)記-壓縮相比

  • 并發(fā)階段會(huì)降低吞吐量

  • 老年代收集器(新生代使用ParNew)

  • -XX:+UseConcMarkSweepGC

  • -XX:+ UseCMSCompactAtFullCollection Full GC后,進(jìn)行一次整理

    整理過(guò)程是獨(dú)占的,會(huì)引起停頓時(shí)間變長(zhǎng)

  • -XX:+CMSFullGCsBeforeCompaction

    設(shè)置進(jìn)行幾次Full GC后,進(jìn)行一次碎片整理

  • -XX:ParallelCMSThreads

    設(shè)定CMS的線程數(shù)量

CMS運(yùn)行過(guò)程比較復(fù)雜,著重實(shí)現(xiàn)了標(biāo)記的過(guò)程,可分為
  • 初始標(biāo)記

    根可以直接關(guān)聯(lián)到的對(duì)象

  • 速度快

    并發(fā)標(biāo)記(和用戶線程一起)
    主要標(biāo)記過(guò)程,標(biāo)記全部對(duì)象

  • 重新標(biāo)記

    由于并發(fā)標(biāo)記時(shí),用戶線程依然運(yùn)行,因此在正式清理前,再做修正

  • 并發(fā)清除(和用戶線程一起)

    基于標(biāo)記結(jié)果,直接清理對(duì)象

特點(diǎn)
  • 盡可能降低停頓

  • 會(huì)影響系統(tǒng)整體吞吐量和性能

    比如,在用戶線程運(yùn)行過(guò)程中,分一半CPU去做GC,系統(tǒng)性能在GC階段,反應(yīng)速度就下降一半

  • 清理不徹底

    因?yàn)樵谇謇黼A段,用戶線程還在運(yùn)行,會(huì)產(chǎn)生新的垃圾,無(wú)法清理

  • 因?yàn)楹陀脩艟€程一起運(yùn)行,不能在空間快滿時(shí)再清理

    -XX:CMSInitiatingOccupancyFraction設(shè)置觸發(fā)GC的閾值
    如果不幸內(nèi)存預(yù)留空間不夠,就會(huì)引起concurrent mode failure

GC參數(shù)整理

-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:SurvivorRatio:設(shè)置eden區(qū)大小和survivior區(qū)大小的比例
-XX:NewRatio:新生代和老年代的比
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParallelGC :新生代使用并行回收收集器
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:ParallelGCThreads:設(shè)置用于垃圾回收的線程數(shù)
-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
-XX:ParallelCMSThreads:設(shè)定CMS的線程數(shù)量
-XX:CMSInitiatingOccupancyFraction:設(shè)置CMS收集器在老年代空間被使用多少后觸發(fā)
-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:SurvivorRatio:設(shè)置eden區(qū)大小和survivior區(qū)大小的比例
-XX:NewRatio:新生代和老年代的比
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParallelGC :新生代使用并行回收收集器
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:ParallelGCThreads:設(shè)置用于垃圾回收的線程數(shù)
-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
-XX:ParallelCMSThreads:設(shè)定CMS的線程數(shù)量
-XX:CMSInitiatingOccupancyFraction:設(shè)置CMS收集器在老年代空間被使用多少后觸發(fā)

GC算法與種類(lèi)

  • 新生代復(fù)制算法
    一篇能漲薪水的JVM調(diào)優(yōu),分析文章

  • 老年代標(biāo)記壓縮
    一篇能漲薪水的JVM調(diào)優(yōu),分析文章

  • 標(biāo)記清除
    一篇能漲薪水的JVM調(diào)優(yōu),分析文章

如何判斷對(duì)象是否可回收?

引用計(jì)數(shù)

  • 引用計(jì)數(shù)算法是通過(guò)在對(duì)象頭中分配一個(gè)空間來(lái)保存該對(duì)象被引用的次數(shù)。如果該對(duì)象被其它對(duì)象引用,則它的引用計(jì)數(shù)加一,如果刪除對(duì)該對(duì)象的引用,那么它的引用計(jì)數(shù)就減一,當(dāng)該對(duì)象的引用計(jì)數(shù)為0時(shí),那么該對(duì)象就會(huì)被回收。

  • 軟引用,弱引用,虛引用

正向可達(dá)

  • 可觸及的

    從根節(jié)點(diǎn)可以觸及到這個(gè)對(duì)象

  • 可復(fù)活的

    一旦所有引用被釋放,就是可復(fù)活狀態(tài)
    因?yàn)樵趂inalize()中可能復(fù)活該對(duì)象

  • 不可觸及的

    在finalize()后,可能會(huì)進(jìn)入不可觸及狀態(tài)
    不可觸及的對(duì)象不可能復(fù)活
    可以回收

JVM監(jiān)控工具

1.jdk自帶jconsole,jvisualvm (jdk的bin目錄)
2.Eclipse Memory Analyzer tool(MAT)
3.在線分析網(wǎng)址:https://fastthread.io

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

一篇能漲薪水的JVM調(diào)優(yōu),分析文章

一篇能漲薪水的JVM調(diào)優(yōu),分析文章

一篇能漲薪水的JVM調(diào)優(yōu),分析文章

長(zhǎng)按訂閱更多精彩▼

一篇能漲薪水的JVM調(diào)優(yōu),分析文章

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉