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

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

回收的日志状况:

HeapDump状况,0x000xxxx内存地址指的是:起始地址、应用空间完结地址、整体空间完结地址;

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