本文使用的JDK版本:

$ java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)

1.

代码文件 GCLogAnalysis.java


import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.LongAdder;
/*
演示GC日志生成与解读
*/
public class GCLogAnalysis {private static Random random = new Random();public static void main(String[] args) {// 当前毫秒时间戳long startMillis = System.currentTimeMillis();// 持续运行毫秒数; 可根据需要进行修改long timeoutMillis = TimeUnit.SECONDS.toMillis(1);// 结束时间戳long endMillis = startMillis + timeoutMillis;LongAdder counter = new LongAdder();System.out.println("正在执行...");// 缓存一部分对象; 进入老年代int cacheSize = 2000;Object[] cachedGarbage = new Object[cacheSize];// 在此时间范围内,持续循环while (System.currentTimeMillis() < endMillis) {// 生成垃圾对象Object garbage = generateGarbage(100*1024);counter.increment();int randomIndex = random.nextInt(2 * cacheSize);if (randomIndex < cacheSize) {cachedGarbage[randomIndex] = garbage;}}System.out.println("执行结束!共生成对象次数:" + counter.longValue());}// 生成对象private static Object generateGarbage(int max) {int randomSize = random.nextInt(max);int type = randomSize % 4;Object result = null;switch (type) {case 0:result = new int[randomSize];break;case 1:result = new byte[randomSize];break;case 2:result = new double[randomSize];break;default:StringBuilder builder = new StringBuilder();String randomString = "randomString-Anything";while (builder.length() < randomSize) {builder.append(randomString);builder.append(max);builder.append(randomSize);}result = builder.toString();break;}return result;}
}

首先在terminal中编译一下此文件

javac GCLogAnalysis.java

如果有乱码报错无法编译,可以加字符集参数

javac -encoding UTF-8 GCLogAnalysis.java

编译完成之后会生成一个 GCLogAnalysis.class文件

执行 命令:

$ java -XX:+PrintGCDetails GCLogAnalysis
$ java -XX:+PrintGCDetails GCLogAnalysis
正在执行...
[GC (Allocation Failure) [PSYoungGen: 49139K->8189K(57344K)] 49139K->16650K(188416K), 0.0070231 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 57305K->8176K(106496K)] 65766K->34377K(237568K), 0.0159032 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
[GC (Allocation Failure) [PSYoungGen: 106480K->8190K(106496K)] 132681K->69927K(237568K), 0.0229538 secs] [Times: user=0.03 sys=0.01, real=0.02 secs]
[GC (Allocation Failure) [PSYoungGen: 106020K->8178K(204800K)] 167757K->103995K(335872K), 0.0203049 secs] [Times: user=0.00 sys=0.03, real=0.02 secs]
[Full GC (Ergonomics) [PSYoungGen: 8178K->0K(204800K)] [ParOldGen: 95817K->97054K(201728K)] 103995K->97054K(406528K), [Metaspace: 2678K->2678K(1056768K)], 0.0266877 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 196608K->8189K(204800K)] 293662K->156047K(406528K), 0.0251842 secs] [Times: user=0.08 sys=0.05, real=0.02 secs]
[Full GC (Ergonomics) [PSYoungGen: 8189K->0K(204800K)] [ParOldGen: 147858K->138866K(278016K)] 156047K->138866K(482816K), [Metaspace: 2678K->2678K(1056768K)], 0.0366620 secs] [Times: user=0.11 sys=0.00, real=0.04 secs]
[GC (Allocation Failure) [PSYoungGen: 196420K->62379K(387072K)] 335287K->201245K(665088K), 0.0281210 secs] [Times: user=0.02 sys=0.08, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 386987K->77822K(408064K)] 525853K->284071K(686080K), 0.0570028 secs] [Times: user=0.03 sys=0.13, real=0.06 secs]
[Full GC (Ergonomics) [PSYoungGen: 77822K->0K(408064K)] [ParOldGen: 206249K->230046K(398848K)] 284071K->230046K(806912K), [Metaspace: 2678K->2678K(1056768K)], 0.0563328 secs] [Times: user=0.11 sys=0.05, real=0.06 secs]
[GC (Allocation Failure) [PSYoungGen: 330240K->102088K(648704K)] 560286K->332134K(1047552K), 0.0484569 secs] [Times: user=0.06 sys=0.13, real=0.05 secs]
执行结束!共生成对象次数:5949
HeapPSYoungGen      total 648704K, used 361282K [0x0000000780900000, 0x00000007b2500000, 0x00000007c0000000)eden space 524288K, 49% used [0x0000000780900000,0x000000079061e6b0,0x00000007a0900000)from space 124416K, 82% used [0x00000007a8e80000,0x00000007af232278,0x00000007b0800000)to   space 136704K, 0% used [0x00000007a0900000,0x00000007a0900000,0x00000007a8e80000)ParOldGen       total 398848K, used 230046K [0x0000000701a00000, 0x0000000719f80000, 0x0000000780900000)object space 398848K, 57% used [0x0000000701a00000,0x000000070faa7940,0x0000000719f80000)Metaspace       used 2684K, capacity 4486K, committed 4864K, reserved 1056768Kclass space    used 287K, capacity 386K, committed 512K, reserved 1048576K

从输出的内容中可以看到GC的次数和类型等详细信息。

新版本的java有些参数废弃了,见注:

注:
一些常见的即将废弃的jvm参数说明
转自https://python.iitter.com/other/114258.htmljdk1.8.0_171,在应用启动的时候,配置如下jvm参数,会出现警告信息1. -XX:+UseFastAccessorMethods含义:get,set 方法转成本地代码(对于jvm来说是冗余代码,jvm将进行优化)
说明: UseFastAccessorMethods option is harmful and has been removed in JDK 9. You need to delete this option from run configuration.2. -XX:+UseConcMarkSweepGC含义: 使用CMS GC,默认新生代会使用ParNew
说明:Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.3.-XX:+PrintGCDetails含义:GC回收信息详解
说明:-XX:+PrintGCDetails is deprecated. Will use -Xlog:gc* instead.,即需要配置成这样:-Xlog:gc:gc.log4.-XX:+PrintGCDateStamps含义:把gc日志带上时间戳
说明:Unrecognized VM option ‘PrintGCDateStamps’

【初级03】java JVM核心技术(3): jvm调优相关推荐

  1. JVM常用参数以及调优实践

    JVM常用参数选项 jvm 可配置的参数选项可以参考 Oracle 官方网站给出的相关信息:http://www.oracle.com/technetwork/java/javase/tech/vmo ...

  2. 深入理解JVM虚拟机10:JVM常用参数以及调优实践

    本文转自[JVM常用参数以及调优实践](https://blog.csdn.net/a724888/article/details/78367780) JVM常用参数选项 jvm 可配置的参数选项可以 ...

  3. JVM整体架构与调优参数说明

    本文来说下JVM整体架构与调优参数说明 文章目录 概述 JVM的分类 JVM的构成 方法区(元空间) 堆 栈 本地方法栈 程序计数器 JVM调优参数 本文小结 概述 很多小伙伴都认为JVM的知识很难, ...

  4. jinfo java_Java自带的JVM性能监控及调优工具(jps、jinfo、jstat、jmap、javap)使用介...

    JVM介绍 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. ...

  5. JVM原理讲解和调优

    一.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...

  6. JVM基础知识和调优

    JVM基础知识和调优 什么是垃圾 当一个对象有人引用它时,那么就不是垃圾,不然就不是垃圾 如何辨别一个对象是不是垃圾 计数(最基础的),有一个对象引用就记一个数(i++)问题,循环引用 GC root ...

  7. JVM原理及性能调优

    注明:转载文章.好记性不如烂笔头呀~ 一.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际 ...

  8. 史上最全JVM整体架构和调优参数说明,带你彻底理解JVM整体架构与调优技巧

    大家好,我是冰河~~ 从今天开始,我们正式开始<架构师进阶系列>技术文的更新,在<架构师进阶系列>中,我们首先一起来探讨有关JVM的知识. 很多小伙伴都认为JVM的知识很难,很 ...

  9. jvm原理及性能调优系列(jvm调优)

    jvm原理及性能调优系列(jvm调优) JVM设置: 1.设置合适的最大堆内存(新生代和老生代的最大和值)和最小堆内存(jvm启动时占用的操作系统内存大小),及设置好堆的比例分配. 2.设置合适的新生 ...

  10. Java SE和Java EE应用的性能调优

    凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划.方法或策略以及特定的领域背景知识.为了在Java性能调优工作中有所成就,你得超越"花似雾中看"的状态, ...

最新文章

  1. 帝国cms7.5百度小程序针对搜索引擎自然搜索优化版生成静态版
  2. 《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动...
  3. 使用http://start.spring.io/ 生成springboot工程
  4. Spring , Spring mybatis 配制文件 模板
  5. 【PostgreSQL-9.6.3】临时表
  6. Directx11教程(47) alpha blend(4)-雾的实现
  7. 二分类问题的评分值与损失函数
  8. 拓端tecdat|R语言极值理论EVT:基于GPD模型的火灾损失分布分析
  9. centos一键清理磁盘空间_MySQLbinlog如何设置自动清理日志
  10. Filmage Screen for Mac 专业录屏软件用这个就足够
  11. 信息系统项目管理师论文范围管理范文(2021上半年范围管理论文)
  12. 字体大宝库:40款好看的英文手写字体下载
  13. docker的离线安装方法和网络源安装方法、内网环境linux脚本批量安装docker、安装docker-compose
  14. 笔试题(求一组数中能构成三角形的个数,不能重复)
  15. 工商总局:将对网店卖家身份进行全面普查
  16. Adjacent Bit Counts
  17. 从软件架构演变看运维的分工与融合
  18. Create user中采用externally操作系统认证方式详解
  19. 网上流传房地产崩盘时间表 楼市重蹈日本覆辙 - 新闻中心 - 搜狐焦点网
  20. ECharts中setOption的title、tooltip、xAxis、yAxis、series、legend等参数的含义。

热门文章

  1. R用户的福音︱TensorFlow:TensorFlow的R接口
  2. tomcat UTF-8格式的HTML文件乱码
  3. “提速降费” 并非一蹴而就 矛头齐指运营商有失偏颇
  4. 低频段用于4G,电信联通仍难改劣势
  5. 字符编码 and cpp
  6. 【Linux_Fedora_应用系列】_1_如何安装音乐播放器和mp3解码
  7. 然后再带动更多的C++人逼起来
  8. 缓存热点问题解决方案
  9. C# 11 新增特性
  10. Web 开发的svg 图标大集合