网站首页 > 文章精选 正文
JVM,Java虚拟机是Java应用程序运行时的核心环境,允许开发者通过外部配置参数来控制各种的内存分配策略来实现对于JVM的运行时性能调优操作,下面我们就来详细介绍一下在日常开发者JVM常用的一些配置参数以及其作用。
内存管理相关参数
在JVM内存是有各种内存区域组成,例如堆内存、非堆内存(Metaspace)、栈内存等,而在日常开发过程中,我们可以通过一些参数配置来调整这些内存区域的大小来完成虚拟机调优操作。
堆内存参数
- -Xms
用设置初始的堆内存大小,在JVM启动时用来分配堆内存空间大小,一般情况下可以设置较大的值可以减少动态扩展过程带来的性能开销。例如:-Xms512m表示初始分配512MB的堆内存。
- -Xmx
用来设置最大的堆内存大小,也是JVM中能够使用的最大的堆内存的上限。例如-Xmx1024m 表示最大堆内存为 1024MB。
一般情况下,建议-Xms 和 -Xmx 设置为相同的值,这样可以避免堆内存动态扩展带来的性能损耗。
- -Xss
用来配置栈内存大小的参数。
- -XX:+HeapDumpOnOutOfMemoryError
配置在发生内存溢出的时候生成堆内存的快照,这样可以方便开发者在后来诊断相关的内存溢出的问题。可以通过-XX:HeapDumpPath参数来指定生成路径,默认情况下使用的是JVM工作路径。
- -XX:NewRatio
这参数用来配置新生代和老年的内存比例大小,例如-XX:NewRatio=2就表示老年代是新生代的2倍。
新生代分区参数
- -XX:SurvivorRatio
用来设置Eden区域和两个Survivor区域的大小比例,在默认情况下该值为8,也就是说Eden:Survivor=8:1,Eden占80%,两个Survivor各占10%。
- -Xmn
这个参数用来设置新生代内存空间的大小,它的大小会直接影响到了垃圾回收的频率和性能,所以需要根据实际情况来进行配置调整。
非堆内存参数
- -XX:MaxMetaspaceSize
这个参数用来配置元空间的大小,属于JDK1.8之后的内存配置参数,在默认情况下是没有限制的,但是最终会受到系统的可用内存限制。
- -XX:MetaspaceSize
这个参数用来配置元空间的初始大小,这个大小会影响到垃圾回收机制的触发时机。
垃圾回收器相关参数
除了内存区域的配置参数之外,JVM还提供了很多的垃圾回收器的参数配置,如下所示。
- -XX:+UseSerialGC
配置启用串行垃圾回收器,这种垃圾回收器比较适合单线程环境或小内存应用。使用
- -XX:+UseParallelGC
配置开启并行垃圾回收器,这种并行的垃圾回收器适合在多核的CPU环境中使用,效率会更高
- -XX:+UseG1GC
用来开启G1垃圾回收器,这种垃圾回收器适用于大内存、低延迟场景使用。
- -XX:+PrintGCDetails
用来开启,垃圾回收日志详细输出操作的参数。
- -Xlog:gc*
是JDK9+的新的日志语法,用来记录垃圾回收相关信息。可以通过如下的方式来进行配置调整,例如:-Xlog:gc*:file=gc.log:time,uptime,level。
性能调优参数
除了上面的参数之外,还有一些用来完成性能调优的参数配置,如下所示。
- -XX:+AlwaysPreTouch
这个参数用来配置在JVM启动时预热所有分配的内存页,这样可以减少JVM运行时的加载延迟操作。
- -XX:+TieredCompilation
在JVM用配置用来启用分层编译的参数,一般情况下,结合解释执行和JIT编译来提高应用启动速度。
- -XX:MaxInlineSize
这个参数是用来设置内联方法的最大字节码大小,通过这个参数大小的调整可以优化方法调用。
- +Xdebug:用于开启远程调试模式,一般情况下可以通过这个参数的设置来开启对生产环境的应用程序的Debug调试找到存在问题的位置进行性能优化。
- -XX:+UnlockDiagnosticVMOptions:用来解锁诊断的配置选项,用于启用实验性参数。
- -XX:+PrintCommandLineFlags:打印启动时使用的所有JVM参数,便于检查配置是否生效。
常见组合配置示例
高性能服务端配置
-Xms4g -Xmx4g -XX:NewRatio=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=200
调试模式配置
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
内存优化配置
-Xms2g -Xmx2g -XX:SurvivorRatio=8 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError
总结
在实际操作中JVM参数的配置需要结合具体的业务需求、硬件环境以及系统瓶颈等来进行调整,一般需要结合垃圾回收机制、日志监控工具来对JVM进行性能测试然后来根据实际结果来优化JVM的性能。
- 上一篇: 让我来告诉你:最重要的 JVM 参数总结
- 下一篇: tomcat常用的配置以及简单调优
猜你喜欢
- 2025-04-23 【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linu
- 2025-04-23 深入解析Java虚拟机(JVM)底层原理
- 2025-04-23 性能优越的轻量级日志收集工具,微软、亚马逊都在用
- 2025-04-23 JVM性能分析工具:Jstack
- 2025-04-23 JVM常用参数自查笔记
- 2025-04-23 Java性能调优实用指南
- 2025-04-23 常见的JVM参数配置
- 2025-04-23 JVM参数配置实战手册:从入门到生产级调优
- 2025-04-23 聊聊JVM如何调优
- 2025-04-23 性能测试之网络分析
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)