3

JVM系列【6】GC与调优2

 收集于1周前 阅读数 3
以下为 快照 页面,建议前往来源网站查看,会有更好的阅读体验。
原文链接: https://segmentfault.com/a/1190000037509447

JVM系列笔记目录

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

了解HotSpot常用命令行参数

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

-标准 所有版本支持

-X 非标准 特定版本支持

-XX 不稳定 下个版本可能会取消

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

参数 说明 -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

RnIfy2i.png!mobile

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

回收的日志情况:

uiQZbqb.png!mobile

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

NbYnu2U.png!mobile

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


猜你喜欢

  • 32

    JVM内存结构简介(jdk1.8)JVM层的GC调优是生产环境上必不可少的一个环节,因为我们需要确定这个进程可以占用多少内存,以及设定一些参数的阀值。以此来优化项目的性能和提高可用性,而且这也是在面试中经常会被问到的问题。想要进行GC调优,我们首先需要简单了解...

  • 17

    JVM性能调优详解

    前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、...

  • 7

    记一次简单的 JVM 调优

    背景 最近对负责的项目进行了一次性能优化,其中包括对 JVM 参数的调整,算是进行了一次简单的 JVM 调优,JVM 参数调整之后,服务的整体性能有 5% 左右的提升,还算不错。 先介绍一下项目的基本情况: 项目...

  • 129

    jvm系列(八):jvm知识点总览

  • 0

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 主要内容 分析PS、CMS...

  • 225

  • 103

    Recently I’ve been working on a project where the execution time of short-lived JVM workloads is a critical factor in overall system performance. This isn’t ...

  • 86

    加入笨神(公众号:你假笨)带头创建的JVMPocket群已经有一段时间了,有幸得到笨神指导一二,学到了不少东西,也纠正了自己对JVM一些误解,还能给群里一些朋友提出的问题给出指引,荣幸荣幸;JVM博大精深,网上对它的解释和认知鱼龙混杂,如果没有深厚的功底很难辨...

  • 103

    JVM 堆内存和非堆内存

  • 66

    谜!JVM为何又僵死

关于极客头条


聚合每日国内外有价值,有趣的链接。

AD