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


    JVM系列笔记目录

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

    了解HotSpot常用命令行参数

    JVM的命令行参数参考: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

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

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

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

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

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

    1. java -XX:+PrintCommandLineFlags -version

    file

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

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

    >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日志。

    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 HelloGC

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

    回收的日志情况:

    file

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

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

  • 相关阅读:
    html 之input标签height设置问题
    jquery 练习笔记
    JavaScript
    css记录
    python 反射器
    python 之 前端初识 html
    [mysql]修改
    [mysql]约束
    [mysql]select
    python_exercise_能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径
  • 原文地址:https://www.cnblogs.com/kongbubihai/p/13832158.html
Copyright © 2020-2023  润新知