查看JVM默认参数及微调JVM启动参数
参考廖雪峰老师的这篇
JVM调优的正确姿势: https://www.liaoxuefeng.com/article/1336345083510818
查看某个JVM进程堆内存信息
# 查询端口号
C:\Users\admin>netstat -ano|findstr 8081
TCP 0.0.0.0:8081 0.0.0.0:0 LISTENING 8792
TCP [::]:8081 [::]:0 LISTENING 8792
# jmap -heap <pid>
C:\Users\admin>jmap -heap 8792
Attaching to process ID 8792, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.251-b08
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 715653120 (682.5MB)
MaxNewSize = 715653120 (682.5MB)
OldSize = 1431830528 (1365.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 536870912 (512.0MB)
CompressedClassSpaceSize = 528482304 (504.0MB)
MaxMetaspaceSize = 536870912 (512.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 537395200 (512.5MB)
used = 390193272 (372.11730194091797MB)
free = 147201928 (140.38269805908203MB)
72.60825403725228% used
From Space:
capacity = 89128960 (85.0MB)
used = 27779432 (26.492530822753906MB)
free = 61349528 (58.507469177246094MB)
31.167683320886947% used
To Space:
capacity = 89128960 (85.0MB)
used = 0 (0.0MB)
free = 89128960 (85.0MB)
0.0% used
PS Old Generation
capacity = 1431830528 (1365.5MB)
used = 122896 (0.1172027587890625MB)
free = 1431707632 (1365.382797241211MB)
0.008583138688323874% used
23174 interned Strings occupying 2401368 bytes.
微调JVM启动参数
JVM参数大致可以分为三类
标准指令:
-开头,这些是所有的HotSpot都支持的参数。可以用java -help打印出来。非标准指令:
-X开头,这些指令通常是跟特定的HotSpot版本对应的。可以用java -X打印出来。不稳定参数:
-XX开头,这一类参数是跟特定HotSpot版本对应的,并且变化非常大。详细的文档资料非常少。
JDK1.8之前元空间叫永久代
STW(Stop-The-World):是指JVM在执行垃圾收集算法时,所有的用户线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些停顿现象多半是由于GC引起。
堆内存默认分配:新生区占1/3,老年区占2/3
新生区分为3块 Eden、From(S0)、To(S1),默认占比是 8:1:1
# -Xms: 设置堆初始化内存大小, 默认是 1/64
# -Xmx: 设置最大分配内存大小, 默认是 1/4
# -Xss: 线程栈大小
# -XX:MetaspaceSize: 元空间大小
# -XX:MaxMetaspaceSize: 元空间最大大小
java -Xms2G -Xmx2G -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar app.jar
# -XX:MaxGCPauseMillis: GC进行STW的最大停顿时间, JVM将尽可能(但不保证)停顿小于这个时间
# -XX:+UseG1GC 使用G1垃圾收集器
java -Xms2G -Xmx2G -Xss1M -XX:+UseG1GC -XX:MaxGCPauseMillis=100ms -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar app.jar
查看JVM的一些默认参数
C:\Users\admin>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=132884864 -XX:MaxHeapSize=2126157824 -XX:+PrintCommandLineFlags
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops
-XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
从上面可以看出JDK8默认使用的GC是 ParallelGC = Parallel Scavenge + Parallel Old
JDK各个版本的GC,来源:https://www.cnblogs.com/zeze/p/6610163.html
新生代
- 1.3:Seriall
- 1.4:ParNew、Parallel Scavenge
老年代
- 1.5:CMS、Serial Old(MSC)
- 1.6:Parallel Old
- 1.7:G1(收集器在JDK 1.7 u4版本正式投入使用)


查看GC的详细信息
C:\Users\admin>java -XX:+PrintGCDetails -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
Heap
PSYoungGen total 38400K, used 2005K [0x00000000d5c00000, 0x00000000d8680000, 0x0000000100000000)
eden space 33280K, 6% used [0x00000000d5c00000,0x00000000d5df54b8,0x00000000d7c80000)
from space 5120K, 0% used [0x00000000d8180000,0x00000000d8180000,0x00000000d8680000)
to space 5120K, 0% used [0x00000000d7c80000,0x00000000d7c80000,0x00000000d8180000)
ParOldGen total 87552K, used 0K [0x0000000081400000, 0x0000000086980000, 0x00000000d5c00000)
object space 87552K, 0% used [0x0000000081400000,0x0000000081400000,0x0000000086980000)
Metaspace used 2360K, capacity 4480K, committed 4480K, reserved 1056768K
class space used 255K, capacity 384K, committed 384K, reserved 1048576K
查看JVM默认参数及微调JVM启动参数的更多相关文章
- linux-3.2.36内核启动1-启动参数(arm平台 启动参数的获取和处理,分析setup_arch)【转】
转自:http://blog.csdn.net/tommy_wxie/article/details/17093297 最近公司要求调试一个内核,启动时有问题,所以就花了一点时间看看内核启动. 看的过 ...
- JVM启动参数手册——JVM之八
jdk1.4.2 JVM官方地址:http://java.sun.com/j2se/1.4.2/docs/guide/vm/index.html 标准和非标注参数(for windows):http: ...
- JVM启动参数大全
java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足, ...
- JVM源码分析之JVM启动流程
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十四篇. 今天呢!灯塔君跟大家讲: JVM源码分析之JVM启动流程 前言: 执行Java类的main方法,程序就能运 ...
- JAVA启动参数整理[转]
java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足, ...
- JAVA启动参数整理
http://blog.csdn.net/turkeyzhou/article/details/7619472 java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的 ...
- java启动参数一
java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足, ...
- linux启动参数了解
文章来源:http://blog.csdn.net/uyiwfn/article/details/7172339在Linux中,给kernel传递参数以控制其行为总共有三种方法:1.build ker ...
- LINUX KERNEL启动参数
LINUX KERNEL启动参数 在Linux中,给kernel传递参数以控制其行为总共有三种方法: 1.build kernel之时的各个configuration选项. 2.当kernel启动之时 ...
随机推荐
- Python分析离散心率信号(中)
Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...
- 不是都需要ARM吗?
不是都需要ARM吗? ARM系统架构简介 什么是ARM处理器,为什么没有听说? ARM-缩写:Advanced RISC Machines 该处理器起源于1984年的英格兰.在成立之初,ARM代表Ac ...
- 基于SSL(TLS)的HTTPS网页下载——如何编写健壮的可靠的网页下载
源码下载地址案例开发环境:VS2010本案例未使用openssl库,内部提供了sslite.dll库进行TLS会话,该库提供了ISSLSession接口用于建立SSL会话. HTTP协议很简单,写个简 ...
- Minecraft类游戏地形生成机制
目录 前言 生成地形高度 生成生物群落 模拟雨水侵蚀.生成河流(未完) 生成洞穴.裂谷 生成植被 放置树木(Bezier曲线) 生成建筑 生成发展域(元胞自动机模型) 放置建筑(DFS) 连接道路(A ...
- Django(62)自定义认证类
前言 如果我们不用使用drf那套认证规则,我们想自定义认证类,那么我们首先要知道,drf本身是如何定义认证规则的,也就是要查看它的源码是如何写的 源码分析 源码的入口在APIView.py文件下的di ...
- go-zero:开箱即用的微服务框架
go-zero 是一个集成了各种工程实践的 Web 和 rpc 框架,它的弹性设计保障了大并发服务端的稳定性,并且已经经过了充分的实战检验. go-zero 在设计时遵循了 "工具大于约定和 ...
- day20200912
连杆通过运动副相对于啮合连杆运动 ! 运动副: 旋转副:仅旋转 滑动副:仅沿直线滑动 柱面副:可旋转可沿直线滑动 其他: 可以设置上限.下限 3D接触 驱动: 简谐驱动 函数驱动 运动函数驱动
- vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
文章很长,建议收藏起来,慢慢读! 备注:持续更新中..... 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 + 涨薪必备 疯 ...
- RPM安装MySQL5.7并更改数据目录
RPM安装MySQL5.7并更改数据目录 文末附MySQL完整配置文件 官网地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 注意 ...
- MySQL密码复杂度策略
前言 MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格.使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置. 本文采 ...