当前位置: 首页 > news >正文

JVM常用运行时参数说明

堆内存

  • -Xmx,设置最大堆内存,默认为物理内存的1/4。示例:-Xmx4096m,设置为4G
  • -Xms,设置初始内存,默认为物理内存的1/64。此值可以和-Xmx相同,避免每次gc后JVM重新分配内存。
  • -Xmn,设置年轻代堆内存,Sun官方推荐配置年轻代大小为整个堆的3/8。示例:-Xmn1536m
  • -XX:SurvivorRatio,设置年轻代中Eden和Survivor区的比值,默认为8。示例:-XX:SurvivorRatio=8,Survivor区和Eden区的比值为8,survivor区占年轻代的1/9
  • -XX:NewRatio,设置老年代和年轻代的比值,默认为2。Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。示例:-XX:NewRatio=4,年轻代和年老代的比值为4,年轻代占整个堆的1/5。
  • -XX:MaxTenuringThreshold,设置垃圾最大年龄。最大值为15。对于并行收集器默认值为15,对于CMS收集器默认值为6。年龄较低时更容易从年轻代到年老代,对于年老代型应用能提高效率;较高时会增加对象在年轻代的存活时间,增加在年轻代就被回收的概率。

非堆内存

  • -XX:MetaspaceSize,设置元空间初始值。示例:-XX:MetaspaceSize=512M
  • -XX:MaxMetaspaceSize,设置元空间最大值。示例:-XX:MaxMetaspaceSize=512M

线程栈内存

  • -Xss,设置线程栈内存,JDK5.0之前是256K,JDK5.0后每个线程大小为1M。线程栈内存大小会限制线程的数量,更小的线程栈会有更多的线程数。线程栈内存过大或者过小都会导致内存溢出。一般小的应用, 如果栈不是很深, 应该是128k够用的大的应用建议使用256k。示例:-Xss128k

GC收集器

  • -XX:+UseSerialGC,设置串行收集器。适用场景:内存小于100M;单核、单机程序,并且没有停顿时间的要求
  • -XX:+UseConcMarkSweepGC,设置并发收集器,开启该参数后会自动将-XX:+UseParNewGC打开。即:ParNew(Young区)+ CMS(Old区)的组合。适用场景:多CPU、追求低停顿时间、快速响应
  • -XX:+UseParallelGC,设置并行收集器。JVM默认的收集器。适用场景:多CPU、高吞吐量、允许停顿时间超过1秒
  • -XX:+UseG1GC,设置G1收集器,适合多核大内存机器(至少6G堆内存),致力于解决串行收集器、并发收集器和CMS收集器的缺陷,官方推荐,性能高。

没有万能的收集器,只有适合的收集器。

辅助参数

  • -verbose:class,显示每个load classes的信息
  • -verbose:gc,显示每次gc的简要信息。约等于-XX:+PrintGC
  • -XX:+PrintGCDetails,打印每次gc的详细信息。
  • -XX:+PrintGCTimeStamps,打印程序启动到GC发生的时间,搭配-XX:+PrintGCDetails使用
  • -XX:+PrintGCDateStamps,打印GC发生时的时间戳,搭配-XX:+PrintGCDetails使用
  • -XX:+PrintHeapAtGC ,打印GC前后的堆信息
  • -XX:+PrintGCApplicationStoppedTime,打印GC时线程的停顿时间
  • -XX:+PrintTenuringDistribution,打印JVM在每次MinorGC后当前使用的Survivor中对象的年龄分布
  • -Xloggc,指定gc日志文件的路径,适用该参数会自动激活-verbose:gc。示例:-Xloggc:/home/logs/gc.log
  • -XX:+HeapDumpOnOutOfMemoryError:内存出现OOM时生成Heap转储文件
  • -XX:HeapDumpPath:设置Heap转储文件的路径。示例:-XX:HeapDumpPath=/home/tmp/test.hprof

其它

  • -XX:+PrintFlagsInitial:打印所有XX选项的默认值
  • -XX:+AggressiveOpts,加快编译,优化代码(Enables the use of aggressive performance optimization features
  • -XX:-UseBiasedLocking。启用偏向锁。默认是打开的。
http://www.dtcms.com/a/285762.html

相关文章:

  • 机器人行业10年巨变从协作机器人到具身智能的萌芽、突破和成长——从 Automatic慕尼黑10 年看协作机器人到具身智能的发展
  • 基于单片机汽车驾驶防瞌睡防疲劳报警器自动熄火设计
  • Git--本地仓库的学习
  • 深入解析Linux系统启动全流程
  • 【Leecode 随笔】
  • 系统分析师-计算机系统-指令系统多处理机系统
  • 【案例教程】基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用
  • 如何将 iPhone 备份到笔记本电脑?
  • mac mlx大模型框架的安装和使用
  • Web前端入门:JavaScript async await 的异步任务进化之路
  • 深入解析文本分类技术全景:从特征提取到深度学习架构
  • 【项目】MCP+GraphRAG搭建检索增强智能体
  • -lstdc++与-static-libstdc++的用法和差异
  • 谈进程间通信
  • 从Hyperliquid到AILiquid:一场从极致性能到策略智能的迭代
  • 硅和锗二极管的主要区别
  • 参会邀请!2025世界人工智能大会合合信息技术交流日报名启动!
  • 深入理解 Linux 进程间通信
  • Linux——库的制作与原理
  • Linux 信号与中断 详解
  • ali linux 上安装swagger-codegen
  • Windows发现可疑的svchost程序
  • 深度理解 KVM:Linux 内核系统学习的重要角度
  • 【Linux】环境基础与开发工具的使用
  • Linux中的LVS集群技术
  • MySQL的基本操作及相关python代码
  • 基于极空间NAS+GL-MT6000路由器+Tailscale的零配置安全穿透方案
  • 云原生 DevOps 实战之Jenkins+Gitee+Harbor+Kubernetes 构建自动化部署体系
  • 小白学Python,网络爬虫篇(2)——selenium库
  • 图机器学习(13)——图相似性检测