网站首页 > 技术文章 正文
JVM提供了多种垃圾回收器,可以根据应用程序的需求选择最适合的垃圾回收器。例如,如果应用程序需要更快的响应时间,可以选择并行垃圾回收器(Parallel GC)或并发垃圾回收器(Concurrent Mark Sweep GC)。如果应用程序需要更低的停顿时间,可以选择增量垃圾回收器(Incremental GC)或并发的垃圾回收器(Concurrent GC)。
1
设置不同的垃圾收集器,分析 GC 日志
首先写一段测试代码:TestHeap.java,如下:
package jvm;
import java.util.ArrayList;
import java.util.List;
//测试代码
public class TestHeap {
public static void main(String[] args) {
List<Heap> list = new ArrayList<Heap>();
while (true) {
list.add(new Heap());
}
}
}
class Heap {
String HeapName = "Java Heap 测试";
}
1、JDK8 默认的垃圾收集器是:UseParallelGC,吞吐量优先
在运行 TestHeap.java 之前,设置如下参数:
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-Xloggc:d:/dump/gc1.log
分析 GC 日志,gc1.log:
2、老年代设置为 CMS 收集器,停顿时间优先
在运行 TestHeap.java 之前,设置如下参数:
-XX:+UseConcMarkSweepGC
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-Xloggc:d:/dump/cms-gc.log
分析 GC 日志,cms-gc.log:
3、G1 收集器,停顿时间优先
在运行 TestHeap.java 之前,设置如下参数:
-XX:+UseG1GC -XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-Xloggc:d:/dump/G1-gc.log
分析 GC 日志,G1-gc.log:
了解 G1 GC 日志:https://blogs.oracle.com/poonam/understanding-g1-gc-logs
2
使用 G1 回收器,从几个维度进行 JVM 调优
设置不同的 JVM 参数,分析输出的 GC 日志,从以下 3 个方面来判断 JVM 是否达到最佳效果:
1、吞吐量
2、停顿时间
3、GC 执行次数
下面介绍调优的思路。
1、首先使用默认的 JVM 参数,使用 GCViewer 分析 GC 日志,记录 GC 效果,以此为基准进行调优
GC 效果分析表:
2、调整内存大小,观察效果
通过设置不同的内存大小来观察吞吐量、停顿时间,GC 次数的变化,记录 GC 效果。
分析上表,容易看出好的方面是:吞吐量提高了,GC 次数减少了;坏的方面是:停顿时间增加了。
3、调整最大停顿时间,观察效果
G1 可以设置停顿时间,通过设置不同的停顿时间来观察吞吐量、停顿时间,GC 次数的变化,记录 GC 效果:
分析上表,容易看出停顿时间确实少了,但是吞吐量下降了,GC 次数反而又增加了,效果不如之前,此时需要把停顿时间再放大一点,再次尝试。但是暂停时间设置的太短,就会导致出现 G1 回收跟不上垃圾产生的速度,最终退化成 Full GC,从而影响性能。
4、调整开始并发 GC 周期的堆占用百分比(0到100)
默认情况下,初始堆的占用率设置为 45%,也就是说当堆的占用率达到 45%,就会触发 GC,值为 0 表示不间断的进行 GC 循环,以下命令将初始堆占用率设置为75%:
-XX:InitiatingHeapOccupancyPercent = 75
调优的过程就是不断的尝试设置 JVM 的参数,使吞吐量、停顿时间,GC 次数达到一个理想的情况。
oracle 官网对 G1 收集器优化建议:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#recommendations
大家可以自己研究一下。
后面将为大家介绍 JVM 性能优化思路。
猜你喜欢
- 2024-11-17 MySQL认证考试题库解析:第7期 - Mysql性能调优(2022.11.04)
- 2024-11-17 JAVA常用JVM调优工具(jvm调优实例)
- 2024-11-17 Linux 性能调优的思路(linux系统调优)
- 2024-11-17 厉害 Spring Boot 项目实战优化和 JVM 调优(小编亲测,真实有效)
- 2024-11-17 关于 RMAN 性能调优的几个参考方面
- 2024-11-17 SpringBoot项目优化和Jvm调优(springboot jvm配置优化)
- 2024-11-17 kettle是如何进行调优的(kettle 调度工具 比较)
- 2024-11-17 Spring Boot项目优化和 JVM 调优(亲测有效)
- 2024-11-17 3年经验程序员不会对Spring Boot调优?面试官:那也太菜了吧
- 2024-11-17 掌握 JVM 调优命令(jvm调优命令行工具)
你 发表评论:
欢迎- 07-10Oracle 与 Google Cloud 携手大幅扩展多云服务
- 07-10分享收藏的 oracle 11.2.0.4各平台的下载地址
- 07-10Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- 07-10Oracle Database@Azure 推进到南美等新区域并增加了新服务
- 07-10Oracle宣布推出 Oracle Database@AWS 的有限预览版
- 07-10Oracle与Nextcloud合作,推出主权云上的安全协作平台
- 07-10NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 07-10对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 605℃几个Oracle空值处理函数 oracle处理null值的函数
- 597℃Oracle分析函数之Lag和Lead()使用
- 584℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 581℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 576℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 570℃【数据统计分析】详解Oracle分组函数之CUBE
- 557℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 550℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- Oracle 与 Google Cloud 携手大幅扩展多云服务
- 分享收藏的 oracle 11.2.0.4各平台的下载地址
- Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- Oracle Database@Azure 推进到南美等新区域并增加了新服务
- Oracle宣布推出 Oracle Database@AWS 的有限预览版
- Oracle与Nextcloud合作,推出主权云上的安全协作平台
- NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 解读丨《归档文件整理规则》— 电子文件元数据存储
- Data Guard跳归档恢复的实践(dataguard failover)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)