My Life My Dream!

守信 求实 好学 力行
随笔 - 193, 文章 - 0, 评论 - 55, 阅读 - 34万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

JVM启动参数建议

Posted on   召冠  阅读(515)  评论(0编辑  收藏  举报

JVM启动参数建议如下:

-server -Xmx8000M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:PrintHeapAtGC

 

java启动参数共分为三类;

其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;

其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

 

-server                                   ## 服务器模式,不配置默认是-client,一定要作为第一个参数

-Xms2g                                  ## 初始化堆内存大小

-Xmx2g                                  ## 堆内存最大值

-Xmn256m                             ## 年轻代内存大小

-XX:PermSize=256m               ## 永久代初始值, 默认是物理内存的1/64

-XX:MaxPermSize=256m          ## 永久代最大值,默认是物理内存的1/4。建议分别设置为128、512

-XX:NewRatio=3                      ## 表示年轻代与年老代的比值,去掉-Xmn这个参数后,默认使用这个参数,比如为3,则新生代占堆的1/4,年老代占3/4。

-XX:+UseParNewGC                                   ## 对年轻代采用多线程并行回收

-XX:+UseConcMarkSweepGC                      ## 对年老代采用并发标记清除(CMS)收集器

-XX:+CMSParallelRemarkEnabled                ## 启用并行标记,降低标记停顿

-XX:+ScavengeBeforeFullGC                       ## FullGC前回收年轻代内存,默认开启

-XX:+CMSScavengeBeforeRemark               ## CMS remark前回收年轻代内存

-XX:+UseCMSInitiatingOccupancyOnly         ## 使用设定的回收阈值(下面指定的70%)开始CMS收集,如果不指定,JVM仅在第一次使用设定值,后续则自动调整

-XX:CMSInitiatingOccupancyFraction=70      ## 使用cms作为垃圾回收使用70%后开始CMS收集

-XX:+UseCMSCompactAtFullCollection          ## Full GC后会进行内存碎片整理、压缩

-XX:CMSFullGCsBeforeCompaction=0           ## 设置在几次CMS垃圾收集后,触发一次内存整理

 

-XX:+PrintGCApplicationConcurrentTime       ##  打印每次垃圾回收前,程序未中断的执行时间

-XX:+PrintGCApplicationStoppedTime           ##  打印垃圾回收期间程序暂停的时间。

-XX:PrintHeapAtGC                                      ##  打印GC前后的详细堆栈信息

 

-XX:+HeapDumpOnOutOfMemoryError       ##  当OOM发生时自动生成 Heap Dump 文件

-XX:+HeapDumpBeforeFullGC                    ##  当 JVM 执行 FullGC 前执行 dump

-XX:+HeapDumpAfterFullGC                       ##  当 JVM 执行 FullGC 后执行 dump

-XX:+HeapDumpOnCtrlBreak                      ##  交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。

-XX:HeapDumpPath=c:\test.hprof                ##  指定 dump 文件存储路径

 

内存溢出的三种类型:
1.第一种OutOfMemoryError: PermGen space,发生这种问题的原意是程序中使用了大量的jar或class
2.第二种OutOfMemoryError: Java heap space,发生这种问题的原因是java虚拟机创建的对象太多
3.第三种OutOfMemoryError:unable to create new native thread,创建线程数量太多,占用内存过大
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示