Java VM Options
Java Hotspot VM 系列文章
先介绍一些基本概念:
1> Minor GC、Major GC和Full GC
1.1 Minor GC
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC
Collecting garbage from Young space (consisting of Eden and Survivor spaces) is called a Minor GC
但是,当发生Minor GC事件的时候,一些有趣的地方需要注意到:
(1).当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配内存的频率越高,越频繁执行 Minor GC
(2).内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,
取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。
(3).执行 Minor GC 操作时,不会影响到永久代,从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。
(4).质疑常规的认知,所有的 Minor GC 都会触发“全世界的暂停(stop-the-world)”,停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多
1.2 Major GC
Major GC is cleaning the Tenured space
One should notice that there is no formal definitions present for those terms. Neither in JVM specification nor in the Garbage Collection research papers. But on the first glance, building these definitions on top of what we know to be true about Minor GC cleaning Young space should be simple:
大家应该注意到,目前,Major GC, Full GC这些术语无论是在 JVM 规范还是在垃圾收集研究论文中都没有正式的定义
很不幸,实际上有点复杂且令人困惑。首先,许多 Major GC 是由 Minor GC 触发的,所以很多情况下将这两种 GC 分离是不太可能的。另一方面,许多现代垃圾收集机制会清理部分永久代空间,所以使用“cleaning”一词只是部分正确
1.3 Full GC
Full GC is cleaning the entire Heap – both Young and Tenured spaces
我们不用去关心到底是叫 Major GC 还是 Full GC,大家应该关注当前的 GC 是否停止了所有应用程序的线程,还是能够并发的处理而不用停掉应用程序的线程
reference from February 25, 2015 by Nikita Salnikov-Tarnovski
https://plumbr.eu/blog/garbage-collection/minor-gc-vs-major-gc-vs-full-gc
2> jstat
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]vmid ==> Virtual Machine Identifier.
A vmid takes the following form: <lvmid>[@<hostname>[:<port>]]
Where <lvmid> is the local vm identifier for the target
Java virtual machine, typically a process id; <hostname> is
the name of the host running the target Java virtual machine;
and <port> is the port number for the rmiregistry on the
target host. See the jvmstat documentation for a more complete
description of the Virtual Machine Identifier.Example:
root@client:~# jstat -class 9581 //类加载统计
Loaded Bytes Unloaded Bytes Time 7605 15296.7 32 52.1 6.13
root@client:~# jstat -compiler 9581 //编译统计
Compiled Failed Invalid Time FailedType FailedMethod1666 1 0 32.72 1 java/lang/Class initAnnotationsIfNecessary
root@client:~# jstat -gccapacity 9581 //堆内存统计NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC 87552.0 175104.0 175104.0 1024.0 1024.0 173056.0 175104.0 349184.0 211456.0 211456.0 131072.0 262144.0 131072.0 131072.0 498 4root@client:~# jstat -gcnew 9581 //新生代垃圾回收统计S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
1024.0 1024.0 0.0 800.0 1 15 1024.0 173056.0 114737.8 509 5.064
root@client:~# jstat -gcnewcapacity 9581 //新生代内存统计NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 87552.0 175104.0 175104.0 58368.0 1024.0 58368.0 1024.0 174080.0 173056.0 520 4root@client:~# jstat -gcold 9581 //老年代垃圾回收统计PC PU OC OU YGC FGC FGCT GCT
131072.0 46468.0 211456.0 128841.0 531 4 1.645 6.894
root@client:~# jstat -gcoldcapacity 9581 //老年代内存统计OGCMN OGCMX OGC OC YGC FGC FGCT GCT 175104.0 349184.0 211456.0 211456.0 536 4 1.645 6.935root@client:~# jstat -gcutil 9581 //总结垃圾回收统计S0 S1 E O P YGC YGCT FGC FGCT GCT 78.12 0.00 30.14 53.04 35.46 682 6.598 5 1.872 8.470root@client:~# jstat -gcmetacapacity 9581 //元数据空间统计java>=8root@client:~# jstat -printcompilation 9581 //JVM编译方法统计
Compiled Size Type Method1680 196 1 org/apache/catalina/util/LifecycleSupport fireLifecycleEvent
请参考以下博文:
http://blog.csdn.net/maosijunzi/article/details/46049117
2.1> java < 8
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)root@client:~# jstat -gc -t 9581 1s
Timestamp S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 80.6 4608.0 4608.0 768.0 0.0 164864.0 69445.5 208896.0 127906.6 131072.0 46478.5 66 1.351 1 0.526 1.87781.6 4608.0 4608.0 768.0 0.0 164864.0 125913.2 208896.0 127906.6 131072.0 46479.0 66 1.351 1 0.526 1.87782.6 4608.0 4608.0 768.0 0.0 164864.0 125913.2 208896.0 127906.6 131072.0 46479.0 66 1.351 1 0.526 1.87783.6 4608.0 4608.0 768.0 0.0 164864.0 125913.3 208896.0 127906.6 131072.0 46479.0 66 1.351 1 0.526 1.87784.6 4608.0 4608.0 768.0 0.0 164864.0 125913.3 208896.0 127906.6 131072.0 46479.0 66 1.351 1 0.526 1.87785.6 4608.0 4608.0 768.0 0.0 164864.0 125913.3 208896.0 127906.6 131072.0 46479.0 66 1.351 1 0.526 1.87786.6 4608.0 4608.0 768.0 0.0 164864.0 125913.4 208896.0 127906.6 131072.0 46479.0 66 1.351 1 0.526 1.877
jstat上面的指标进行介绍:
C 代表总量, U代表使用量。
S0、S1 代表的是幸存1区,幸存2区或者叫做from或者to区。
E 代表Eden,P代表老年代,
EC表示Eden的大小
EU表示Eden的使用
OC老年代的大小
OU老年代的使用的量
PC Permanent Space大小
PU Permanent Space 的使用量
YGC代表Minor GC次数,T代表时间,
YGCT代表Minor GC所耗时间
FGC代表Full GC
FGC代表Full GC所耗时间
GCT代表所有GC所耗时间
2.2> java >=8
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)root@client:~# jstat -gc -t 7656 1sTimestamp S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 9103.1 512.0 512.0 0.0 192.0 173568.0 156306.7 175104.0 128993.9 57560.0 56323.8 6656.0 6314.9 4835 32.343 2 0.343 32.6879104.2 512.0 512.0 0.0 192.0 173568.0 156306.7 175104.0 128993.9 57560.0 56323.8 6656.0 6314.9 4835 32.343 2 0.343 32.6879105.2 512.0 512.0 0.0 192.0 173568.0 156306.7 175104.0 128993.9 57560.0 56323.8 6656.0 6314.9 4835 32.343 2 0.343 32.6879106.2 512.0 512.0 0.0 192.0 173568.0 156306.7 175104.0 128993.9 57560.0 56323.8 6656.0 6314.9 4835 32.343 2 0.343 32.6879107.2 512.0 512.0 0.0 192.0 173568.0 156306.7 175104.0 128993.9 57560.0 56323.8 6656.0 6314.9 4835 32.343 2 0.343 32.6879108.2 512.0 512.0 0.0 192.0 173568.0 156393.3 175104.0 128993.9 57560.0 56323.8 6656.0 6314.9 4835 32.343 2 0.343 32.687
jstat上面的指标进行介绍:
C 代表总量, U代表使用量。
S0、S1 代表的是幸存1区,幸存2区或者叫做from或者to区。
E 代表Eden,P代表老年代,
EC表示Eden的大小
EU表示Eden的使用
OC老年代的大小
OU老年代的使用的量
MC 方法区大小
MU 方法区的使用量
CCSC 压缩类空间大小
CCSU 压缩类空间使用量
YGC代表Minor GC次数,T代表时间,
YGCT代表Minor GC所耗时间
FGC代表Full GC
FGC代表Full GC所耗时间
GCT代表垃圾回收消耗总时间
Java VM Options相关推荐
- IDEA Java程序启动添加参数 VM options、Program arguments、Program arguments
文章目录 Run Configuration 1. VM options 1.1 添加方法 1.2 获取方法 2. Program arguments 2.1 添加方法 2.2 获取方法 3. Env ...
- java.vm.info_深入理解java虚拟机
第四章:java虚拟机命令行工具 1:jps命令行进程状况工具 jps [options] [hostid] C:\Users\lenovo>jps -l 13824 sun.tool ...
- Creating a Java VM from Android Native Code
If you're writing native / JNI code for Android, it's probably as native method of an Android app. T ...
- java VM argument_java之program arguments与VM arguments
program arguments 中的值作为 args[] 的参数传入的,而 VM Arguments 是设置的虚拟机的属性. program arguments 是要传给你的应用程序的,它通过主函 ...
- Intellij IDEA 的VM options参数配置说明
Intellij IDEA 的Tomcat Server 配置VM options参数说明 点击Intellij IDEA 界面窗口Run,打开Edit Configuration,出现Run/Deb ...
- java VM argument_java vm args
这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space 引起的.第一次出现这样的的问题以后,引发了其他的问题.在网上一查可能是JAVA的堆栈 ...
- Android之jni编译出现no matching function for call to ‘_JNIEnv::GetJava(JNIEnv* , Java VM**)‘解决办法)‘
1.问题 jni编译出现这个错误 no matching function for call to '_JNIEnv::GetJava(JNIEnv* &, Java VM**) 2.原因 自 ...
- Java VM –提防YoungGen空间
您可能从我们以前的面向性能的文章中看到,健康的JVM是实现最佳应用程序性能和稳定性的最重要目标之一. 这样的健康评估通常仅关注主要收集的频率(避免)或检测内存泄漏的存在. 年轻一代空间或短寿命物体的大 ...
- java获取vm运行参数_如何获取在Java中运行Java VM的版本?
java获取vm运行参数 To get the version of running VM (Virtual Machine) in Java, we use the getProperties() ...
- maven打包报内存不足,配置maven vm options
服务器上内存所剩余不多了,用mvn打包报内存不足.解决办法就要把vm options中内存设置小一些. .mvn/jvm.config文件: 从 Maven 3.3.1+ 开始,您可以通过${mave ...
最新文章
- PyTorch 笔记(20)— torchvision 的 datasets、transforms 数据预览和加载、模型搭建(torch.nn.Conv2d/MaxPool2d/Dropout)
- UI设计培训分享:学习UI设计有哪些技巧
- c语言关于office运行库,VC++运行库32/64位合集下载|微软常用运行库合集(2015- 2021版)...
- 计算机网络-信道的极限容量
- set python_python基础:集合-set()
- Windows Phone开发手记-WinRT下分组拼音的实现
- 数据库存储模型-数据存储
- linux c ecb 加密解密,OpenSSL对数组加密解密的完整实现代码
- 海龟绘图两小时上手C语言 - 5 彩色螺旋线
- 如何使用JSTL及JSTL标签库
- 命名问题导致的一个bug
- 去掉Windows Media Player 12 中”挖挖哇“网址的方法
- Codeforces Raif Round 1 (Div. 1 + Div. 2) 1428D Bouncing Boomerangs 贪心+构造
- value too long for type character varying(32)
- 数据的力量 驰援疫情丨对抗新型肺炎,志愿者招募
- Error unpacking rpm package initscripts解决方案
- 鹰潭高通量测序建设细节概述
- android 解锁mac,论一台笔记本三个不同系统的玩法,解锁正确姿势
- jsbarcode 条形码
- 从心出发,华展云2.0荣耀发布
热门文章
- 谷歌大脑全新软件能让马赛克样模糊人脸变清晰
- c语言计算圆周率的第100位,JavaScript实现计算圆周率到小数点后100位的方法示例...
- windows下 PHP 安装
- 最新SSD固态硬盘颗粒QLC、SLC、MLC、TLC详解
- 前端开发:颜色代码速查表【英文颜色、HEX格式、RGB格式】
- 关于Linux下ISE和vivado安装cable usb驱动的问题
- [V811双核] 最新昂达V811最新2.0固件ROOT方法
- U-Boot源码之串口驱动
- Jmeter接口测试流程详解(中科软测认证中心)
- jmeter接口测试