JVM系列【6】GC与调优2

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 <br/>-XX:+PrintGCDetails<br />-XX:+PrintGCTimeStamps

打印GC情况、GC详细日志、GC日志时间戳

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

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

  1. java -XX:+PrintCommandLineFlags -version

file

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

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

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

PS的GC日志详解

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

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

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

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

回收的日志情况:

file

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

JAVA工程师成神道路

一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优1.1.3.

Java工程师成神之路

一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid