网站首页 > 精选教程 正文
JVM(Java虚拟机)的参数配置对于优化Java应用程序的性能至关重要。本文将介绍一些常见的JVM参数配置。
一、标准参数
- -client和-server:设置JVM使用client模式或server模式。client模式启动快,但性能和内存管理效率不高,适用于桌面应用;server模式启动慢,但性能和内存管理效率高,适用于服务器。64位的JVM只有server模式。
- -verbose:查询GC(垃圾回收)问题最常用的命令之一,常用于排查GC问题。例如,-verbose:gc输出每次GC的相关情况,-verbose:class输出JVM载入类的相关信息,-verbose:jni输出native方法调用的相关情况。
二、非标准参数(-X)
- -Xms:设置初始堆内存大小,即程序启动时占用内存大小,默认是物理内存的1/64。
- -Xmx:设置最大堆内存大小,即程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常,默认是物理内存的1/4。
- -Xmn:设置年轻代大小,增大年轻代会减少老年代大小,官网推荐整堆的3/8。
- -Xss:设置单个线程栈内存大小,默认是1MB。
三、非标准参数(-XX)
性能参数
- -XX:+UseSerialGC:使用串行垃圾收集器。
- -XX:+UseParallelGC:使用并行垃圾收集器(年轻代)。
- -XX:+UseParallelOldGC:使用并行垃圾收集器(老年代),JDK6.0以上支持。
- -XX:+UseConcMarkSweepGC:使用CMS(Concurrent Mark Sweep)垃圾收集器,适用于多CPU,并要求缩短因GC造成程序停滞的时间。
- -XX:+UseG1GC:使用G1垃圾收集器。
- -XX:+HeapDumpOnOutOfMemoryError:这个参数告诉JVM在内存溢出错误发生时生成堆转储文件。
- -XX:HeapDumpPath={HEAP-DUMP-FILE-PATH} :这个参数指定了堆转储文件的存储路径。需要将{HEAP-DUMP-FILE-PATH}替换为实际的文件路径。
行为参数
- -XX:NewRatio:设置年轻代(包括Eden和两个Survivor区)与老年代的比值(除去持久代)。例如,设置为4,则年轻代与老年代所占比值为1:4。
- -XX:SurvivorRatio:设置年轻代中Eden区与Survivor区的大小比值。例如,设置为4,则两个Survivor区与一个Eden区的比值为2:4。
- -XX:MaxTenuringThreshold:设置垃圾最大年龄。如果设置为0,则年轻代对象不经过Survivor区,直接进入老年代。
- -XX:PermSize 和 -XX:MaxPermSize:设置持久代(PermGen space)的初始大小和最大大小。不过,在Java 8中,PermGen space被元空间(Metaspace)所替代,相关参数变为-XX:MetaspaceSize和-XX:MaxMetaspaceSize。
调试参数
- -XX:+PrintGC:每次触发GC时打印相关日志。
- -XX:+PrintGCDetails:打印更详细的GC日志。
- -XX:+PrintGCTimeStamps:打印GC发生的时间戳。
- -Xloggc:filename:将GC日志输出到指定文件。例如,-Xloggc:/data/gclog/gc.log表示将GC日志输出到指定路径。
- -XX:+DisableExplicitGC:禁用System.gc()调用,防止显式触发Full GC。
四、实际应用中的配置示例
辅助指令jinfo
jinfo:查看或修改正在运行的JVM配置。例如,jinfo -flag HeapDumpOnOutOfMemoryError 870778用于查看进程号为870778的JVM是否开启了HeapDumpOnOutOfMemoryError配置。
配置示例
堆内存配置
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
这里设置了JVM最大可用内存为3550MB,初始内存也为3550MB(避免垃圾回收后重新分配内存),年轻代大小为2GB,每个线程的堆栈大小为128KB。
并行收集器配置
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
这里选择了并行垃圾收集器,并配置了20个并行GC线程。
五、注意事项
- 在进行JVM调优之前,建议先进行性能分析和监控,找出潜在的瓶颈和问题点。
- 不同的应用程序可能需要不同的参数配置,因此需要根据具体应用程序的特性和工作负载进行评估和测试。
- 避免过度创建对象,以减少垃圾回收的负担。
猜你喜欢
- 2024-11-01 关于启动电容器的匹配 启动电容器怎么接线
- 2024-11-01 冷水机的基本运行参数包括哪些? 冷水机参数含义
- 2024-11-01 Java线程池解读:从入门到精通,核心参数全掌握!
- 2024-11-01 使用Java编写求和的代码 使用java编写求和的代码是什么
- 2024-11-01 稳压器启动电流多大? 稳压器输出多少正常
- 2024-11-01 Java容器化参数配置最佳实践 java容器有哪几种
- 2024-11-01 Java变量 java变量的数据类型分为两种
- 2024-11-01 深入理解JVM运行原理:从内存布局到执行流程的全面解析
- 2024-11-01 丹佛斯VLT2900变频器维修后试运行参数设置方法及教...
- 2024-11-01 Java 21:有什么新变化? java+21:有什么新变化?举例说明
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)