JVM系列【6】GC与调优2.md

2020年10月18日 阅读数:5
这篇文章主要向大家介绍JVM系列【6】GC与调优2.md,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

JVM系列笔记目录

  • 虚拟机的基础概念
  • class文件结构
  • class文件加载过程
  • jvm内存模型
  • JVM经常使用指令
  • GC与调优

了解HotSpot经常使用命令行参数

JVM的命令行参数参考: https://docs.oracle.com/javas...html

-标准 全部版本支持
-X 非标准 特定版本支持
-XX 不稳定 下个版本可能会取消

常见和本文中可能用到的参数记录一下,具体垃圾回收器的参数后续调优的详细说明。java

参数 说明
-Xmx 最大可用内存
-Xms 初始内存,通常和-Xmx相同,避免从新分配
-Xmn 年轻代大小,JVM内存=年轻代+老年代大小+永久代(通常64M)
-XX:+PrintFlagsInitial 打印默认参数值
-XX:+PrintFlagsFinal 打印最终参数值
-XX:+PrintGC <br/>-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
打印GC状况、GC详细日志、GC日志时间戳

常见垃圾回收器组合参数设定:(1.8)

如何查看JVM默认的垃圾回收器?数组

  1. java -XX:+PrintCommandLineFlags -version

file

  1. 经过GC日志来辨别是何种垃圾回收器

常见垃圾回收器组合参数设定:(1.8版本的)oracle

>1. ​    -XX:+UseSerialGC = Serial New (DefNew) + Serial Old        小型程序使用,默认状况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
>2. ​    -XX:+UseParNewGC = ParNew + SerialOld  这个组合已经不多用(在某些版本中已经废弃)
>3. ​    -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old
>4. ​    -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】
>5. ​    -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
>6. ​    -XX:+UseG1GC = G1


PS的GC日志详解

每一种垃圾回收器的日志是不同。这里提供一个样例来详细解释PS的GC日志。jvm

public class HelloGC{
    public static void main(String[] args){
        System.out.println("HelloGC!");
        List list = new ArrayList();
        for(;;){
            // 死循环中每次分配1M大小的数组,存放在list中,JVM内存不足的时候会产生GC
            byte[] b = new byte[1024*1024];
            list.add(b);
        }   
    }
}

编译后启动命令:java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+UseParallelGC HelloGCspa

这里设置了最大内存为60M,初始内存为40M,新生代的内存为10M,使用PS垃圾回收器,并打印GC的回收状况。程序运行很快就会产生GC日志。命令行

回收的日志状况:3d

file

HeapDump状况,0x000xxxx内存地址指的是:起始地址、使用空间结束地址、总体空间结束地址;
fileunix

知识分享,转载请注明出处。学无前后,达者为先!