JVM调优是调整和配置Java虚拟机(JVM)的过程,以便最大限度地提高应用程序的性能和效率。这涉及到调整内存设置、选择合适的垃圾收集器,以及配置各种性能参数。
今天我们来了解一下参数如何设置
JVM调优的重要性
1.通过调整JVM参数,可以减少延迟,提高应用的响应速度和吞吐量。
2.合理配置JVM参数可以使应用更有效地利用系统资源。
3.适当的调优可以减少系统崩溃的风险,提高应用的可靠性。
堆参数设置:
-XX:+PrintGC:在每次垃圾收集发生时打印相关信息。
-XX:+UseSerialGC:配置使用串行回收器。
-Xms:设置JVM启动时初始化堆的大小。
-Xmx:设置JVM能获得的最大堆大小。
-XX:+PrintGCDetails:打印详细的垃圾收集日志,包括各个区的情况。
-XX:+PrintCommandLineFlags:输出传给虚拟机的隐式或显式参数。
-Xmx200m -Xms50m -XX:+PrintCommandLineFlags:可以将隐式或者显示传给虚拟机的参数输出
新生代参数配置:
-Xmn:设置新生代的大小。
-XX:SurvivorRatio=:设置新生代中Eden空间与Survivor空间的比例。
-XX:NewRatio=:设置新生代和老年代的比例。
-Xms200m -Xmx200m -Xmn10m -XX:SurvivorRatio=2 -XX:+PrintGCDetails
堆溢出参数配置:
-XX:+HeapDumpOnOutOfMemoryError:在内存溢出时导出整个堆信息。
-XX:HeapDumpPath=
-Xms20m -Xmx200m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = test.dump
//指定JVM的初始堆大小为20MB,JVM的最大堆大小为200MB,当JVM发生OutOfMemoryError错误时,自动生成堆转储文件(Heap Dump)。
栈参数配置:
-Xss:指定线程的最大栈空间。
-Xss10m
MaxTenuringThreshold参数,可以指定新生代对象经过多少次回收后进入老年代。另外,大对象新生代eden区无法装入时,也会直接进入老年代。
JVM里有个参数可以设置对象的大小超过在指定的大小之后,直接晋升老年代。
-XX:PretenureSizeThreshold=15
-Xmx100M -Xms100M -XX:+UseSerialGC -XX:MaxTenuringThreshold=15 -XX:+PrintGCDetails
PretenureSizeThreshold参数,可以进行指定进入老年代的对象大小,但是要注意TLAB区域优先分配空间。虚拟机对于体积不大的对象 会优先把数据分配到TLAB区域中,因此就失去了在老年代分配的机会.
-Xmx100M -Xms100M -XX:+UseSerialGC -XX:+PrintGCDetails -XX:PretenureSizeThreshold=500 -XX:-UseTLAB
查看和调试参数:
java -help:查看Java命令参数。
java -version:查看JVM版本。
java -XX:+PrintFlagsFinal -version:打印JVM运行参数。
jinfo -flags <pid>:查看Java进程的JVM参数。
jstat -gc <pid>:查看进程的GC信息。
jmap -heap <pid>:查看内存使用情况。
最后:
JVM调优是一个多方面的过程,涉及不同层面的调整和配置。合理使用JVM调优参数,可以帮助我们更好地理解和优化Java应用程序的性能。具体参数与程序,并发情况等等都要关系,需要合理的测试与设置