千家信息网

Java虚拟机中如何进行性能调优

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章的内容主要围绕Java虚拟机中如何进行性能调优进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!一. 如
千家信息网最后更新 2026年11月02日Java虚拟机中如何进行性能调优

这篇文章的内容主要围绕Java虚拟机中如何进行性能调优进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!

一. 如何找到一个垃圾?

1) 引用计数算法:给对象添加一个引用计数器,有一次引用,计数器值就加1;当引用失效时,计数器值就减1。很多流程的编程语言例如Python都使用这种方法管理内存,但是主流的Java虚拟机没有选用它,主要原因是它很难解决对象之间相互循环引用的问题。

2) 根可达性分析算法:因为引用计数算法无法解决对象之间相互循环引用的问题,继而引出了这个算法。思想是以GC Roots作为起始点开始向下搜索,所走过的路径成为引用链,当一个对象到GC Roots没有任何引用链时,则这个对象是不可用的,就是垃圾。

二. 找到一个垃圾后,如何清除它?

1) Mark-Sweep(标记清除):先标记出可回收的对象,然后清除。如下黑色部分为可回收对象,灰色部分为存活对象,绿色部分为未使用对象。

它的主要不足有两个:

1. 标记和清除两个过程的效率都不高

2. 另一个是空间的问题,标记清除之后产生了大量不连续的内存碎片,碎片会导致以后需要分配较大对象时,无法找到足够的连续内存,继而提前触发另一次垃圾收集动作。

2) Copying(拷贝):将内存划分为两块,将存活对象全部copy到下面的区域,然后把上面的全部清除。

新生代中的Survivor1和Survivor2就是这样的。

缺点:浪费内存

3) Mark-Compact(标记压缩或者标记整理):既不想碎片化,又不想浪费内存,就先将回收的对象标记起来,然后一边回收,一边把存活对象向一端移动。

缺点:效率偏低

3. CMS 全称 ConcurrentMarkSweep 老年代 并发的,垃圾回收和应用程序同时进行,降低STW的时间(200ms),CMS问题很多,所以没有一个版本默认是CMS,只能手动设定。CMS既然是MarkSweep,就一定会有碎片化的问题,碎片达到一定的程度,CMS老年代分配对象分配不下的时候,使用Serial Old进行老年代回收。(面试重灾区)

主要有四个过程:

初始标记、并发标记、重新标记、并发清理

CMS的缺点是:产生了浮动垃圾,并且使用Serial Old来清理整个老年代,这是CMS设计的缺陷;但是如果CMS做好调优,支持的内存要比Parallel Old大的多。

想象一下:

PS + PO -> 加内存 换垃圾回收器 -> PN + CMS + Serial Old (几个小时-几天的STW) ,几十个G 的内存,单线程的回收 -> G1 + Full GC 几十个G -> 上T内存的服务器 ZGC

CMS并发标记采用的是: 三色标记法 + Incremental Update

4. G1 垃圾回收器 (200ms - 10 ms)

算法:三色标记 + SATB

由于越来越多的内存需要回收,必然会产生STW,所以G1应运而生。

逻辑分代,物理不分代。

4. ZGC (10ms - 1ms ) PK C++

算法:ColoredPointers + LoadBarrier

5. Shenandoah

算法:ColorPointers + WriteBarrier

CMS中新生代的默认年龄是6,PS/PO中新生代的默认年龄是15,进入老年代,可以通过参数:-XX:MaxTenuringThreshold配置

jdk1.0自带的Serial和Serial Old,现在用的最多的是Parallel Scavenge和Parallel Old,调优用的是ParNew和CMS,jdk1.8用G1也没有问题

jdk1.8默认是Parallel Scavenge和Parallel Old,不管是单线程Serial还是并行Parallel,只要人多,都会出现问题,所以就有了承前启后的ParNew和CMS。

Java的特点有哪些

Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

感谢你的阅读,相信你对"Java虚拟机中如何进行性能调优"这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注网站!小编会继续为大家带来更好的文章!

对象 标记 内存 垃圾 问题 算法 年代 碎片 程序 应用程序 应用 新生 新生代 特点 缺点 计数器 语言 分配 编程 性能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网项目 盈实互联网科技 互联网科技金融 亿账通互联网科技 互联网高科技股票 互联网之后的科技是什么 昭通云南众福互联网科技有限公司 中化能源互联网科技招聘 互联网对科技的发展 广西互联网科技孵化中心 世界互联网领先科技成果获奖 保险科技服务互联网营销体系 沐思想互联网科技有限公司 银行科技岗属于互联网吗 半导体行业属于互联网高科技类吗 广西科技产业互联网是什么 科技和互联网行业的特点 广西泛欧互联网科技有限公司 上海旺乐尼互联网科技有限公司 广东猫王互联网科技有限公司电话 广州淘业互联网络科技 鸠鸠互联网科技 重庆互联网络科技 长亮科技互联网金融 互联网金融科技委员会 重庆科技学院互联网 美国互联网前沿科技 朱啸虎曾投资哪些互联网科技企业 江苏互联网科技小贷 黑龙江互联网科技公司
0