jvm 参数小结

简介: 0.参数默认值 java -XX:+PrintFlagsFinal 可以使用 此命令查看参数默认值。示例图见图0-1. 图0-1 看到NewRatio默认值为2 1.内存相关 -Xmx   //Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;-Xms   //Java Heap初始值,Server端JVM最好将

0.参数默认值

java -XX:+PrintFlagsFinal
可以使用 此命令查看参数默认值。示例图见图0-1.

图0-1 看到NewRatio默认值为2

1.内存相关

-Xmx   //Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-Xms   //Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
-Xmn   //Java Heap 新生代大小,不熟悉最好保留默认值;
-Xss   //每个线程的Stack大小,不熟悉最好保留默认值;

-XX:MaxDirectMemorySize=128m  //设置最大堆外内存

-XX:SurvivorRatio=8

新生代中Eden大小 / survivor大小 的值,默认值为8。

-XX:NewRatio=2

老年代大小 / 新生代大小 的值,英文名字感觉像是取反了。默认值为2。即新生代占堆内存的1/3。

-XX:PermSize=128M 

设置永久代(方法区)的大小。

1.1 默认值

-server时最大堆内存是物理内存的1/4,但不超过1G。

1.2 堆外内存

tomcat 7中使用了NIO,而这会占用一部分堆外内存。可通过 -XX:MaxDirectMemorySize=50m进行限制。
亲测有效果,堆外内存减少了200M,但堆内存+永久代+最大堆外内存还是小于进程的实际占用内存,小了147M。不得其解。

1.3 java8

java 8中PermSpace变为了Metaspace。如最大元空间尺寸就变为: -XX:MaxMetaspaceSize=xxm 

2. GC策略

2.1 新生代

-XX:+UseParNewGC //指定新生代的收集器为ParNew

2.2 老年代

-XX:+UseConcMarkSweepGC       //指定老年代的垃圾收集器为CMS
-XX:CMSInitiatingOccupancyFraction=85      //老年代占用比例达到85%时开始回收

2.3 年龄相关

-XX:MaxTenuringThreshold=15
指定对象到达15岁时被移到Old区。默认值为15。
需要注意的是,并不是年龄非得到达指定值后才会被移到老年代,JVM还有自己的一套规则,烦人。

3.GC日志

-Xloggc:../gclogdir/logc.txt          //指定gc日志的打印位置,注意必须指定到文件,不能为目录。
-XX:+PrintGCDateStamps 
-XX:+PrintGCDetails 
-XX:+PrintHeapAtGC 
-XX:+PrintTenuringDistribution
这个参数用于显示每次Minor GC时Survivor区中各个年龄段的对象的大小。

4.visual VM远程监控

使用JMX协议进行远程监控。
比如在A机器(windows)上查看B机器(linux)上j进程c(java进程)的情况。需要在c启动时加入参数:
-Djava.rmi.server.hostname=B机器ip 
-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=port 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

5. 常见搭配

java -server -Xms2g -Xmx2g -Xmn512m -XX:CMSInitiatingOccupancyFraction=85 -XX:SurvivorRatio=8 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -Dcom.sun.management.jmxremote.port=2175 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../dumpdir/ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xloggc:../gclogdir/

6.IDE中调试指定参数

Eclipse中修改待运行程序的参数。package视图|app.java|右键|Run As|Run Configurations,在Arguments 参数中的“VM arguments: ”中填入如下值即可,见图6-1。

-Xms256m -Xmx256m


图6-1 eclipse中指定vm参数


eclipse中运行代码,实质就是它新开了一个线程运行你的代码。

通过代码检验



目录
相关文章
|
16天前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
5月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
52 0
|
2月前
|
监控 架构师 Java
JVM进阶调优系列(6)一文详解JVM参数与大厂实战调优模板推荐
本文详述了JVM参数的分类及使用方法,包括标准参数、非标准参数和不稳定参数的定义及其应用场景。特别介绍了JVM调优中的关键参数,如堆内存、垃圾回收器和GC日志等配置,并提供了大厂生产环境中常用的调优模板,帮助开发者优化Java应用程序的性能。
|
2月前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
59 3
|
2月前
|
Java Android开发 开发者
【编程进阶知识】精细调控:掌握Eclipse JVM参数配置的艺术
本文详细介绍了如何在Eclipse中配置JVM参数,包括内存的初始和最大值设置。通过具体步骤和截图演示,帮助开发者掌握JVM参数的精细调控,以适应不同的开发和测试需求。
46 1
|
4月前
|
Java
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
|
5月前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
120 8
|
4月前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
377 0
|
5月前
|
存储 Java
java 服务 JVM 参数设置配置
java 服务 JVM 参数设置配置
162 3
|
5月前
|
安全 Java fastjson
JVM 配置参数 -D,-X,-XX 的区别
JVM 配置参数 -D,-X,-XX 的区别
96 2