在生产环境下对Java虚拟机JVM进行参数调优是必不可少的。作为普通的开发人员,如果对JVM的参数优化有一定的了解,即使是从知识体系的完整性来考虑也是大有裨益的。另外,了解JVM的运行原理也有助于编写性能良好的程序,而不是让代码成为服务器CPU和内存的杀手。
【Windows平台的参数调优】
通常我们都在Windows系统下面进行软件开发工作,因此在Windows平台下面的JVM参数调优也是有必要了解的。有时候开发大规模的商业系统,即使是在开发环境也不得不进行JVM参数调优,否则系统根本跑不起来。选用MyEclipse作为开发工具,集成Tomcat作为web容器,选择“Window -> Preferences”菜单:依次选择左侧的导航菜单“MyEclipse -> Servers -> Tomcat -> Tomcat 6.x -> JDK”,或者直接在文本框中输入“tomcat”进行筛选:如下图所示
在VM Arguments文本框中输入需要设置的JVM参数,然后在MyEclipse中启动Tomcat服务器。
-Xms512m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=256m
为了验证Tomcat是否成功启动,打开命令行输入命令:
jps
命令提示符回显如下内容,其中Bootstrap即为Tomcat服务器进程,前面对应的8184即为Tomcat进程的进程号PID:
6540 Jps 1176 8184 Bootstrap
然后这个时候我们仍然不知道设置的VM Arguments是否真的在Tomcat启动时成功加载,为此输入命令
jps -v
提示符回显如下内容,可以看到我们设置的VM Arguments参数确实是生效了的。
【Linux平台的参数调优】
通常情况下,生产环境的Tomcat服务器都部署在Linux系统下面,因此简要介绍Linux系统下面的有关设置,进入Tomcat的\bin目录:
cd /usr/local/tomcat/bin
打开需要编辑的shell文件:
vi catalina.sh
找到“# ----- Execute The Requested Command -----”行,在下面添加如下内容:
JAVA_OPTS="$JAVA_OPTS -server -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64m"
然后保存退出即可,重启Tomcat服务器之后,可通过进程查看命令查看Tomcat启动时所使用的VM Arguments参数:
ps -ef | grep tomcat
可以看到Tomcat启动时所使用的VM Arguments参数:
【JVM优化参数说明】
在生产环境下可以设置的JVM参数远不止上面提到的这些。下面简要介绍一些常见的VM Arguments参数,理解并正确使用这些参数需要对JVM原理、堆内存结构、垃圾回收原理有比较深刻的认识,这里抛砖引玉了啦。
-server
默认情况下JVM运行在client模式,通过设置该参数JVM将运行在server模式。
-Xms512m -Xmx512m
设置Java堆内存的最大、最小值,通常设为一致以避免进行垃圾回收之后重新调整堆的大小。
-XX:PermSize=256m -XX:MaxPermSize=256m
设置方法区的最大、最小值,如果使用Spring、Hibernate等框架技术,在运行时会生成大量 的动态代理类,有可能导致永久代内存溢出。
-Xss1m
设置线程栈的大小,可以结合实际情况设置的小一点,以运行创建更多的线程数目。
-XX:NewRatio=3
设置Java堆内存新生代、老年代的比例为1:3
-XX:SurvivorRatio=8
新生代内存分配比例为Eden:From Survivor:To Survivor=8:1:1
-XX:+UseParNewGC
新生代使用并行的ParNew收集器。
-XX:ParallelGCThreads=2
并行收集的GC线程数目为2、和CPU内核数目一致。
-XX:+UseConcMarkSweepGC
老年代使用CMS收集器。
-XX:CMSInitiatingOccupancyFraction=70
老年代在堆内存使用率为70%开始进行Full GC
-XX:+CMSParallelRemarkEnabled
老年代通过并行标记减少因为标记而导致的停顿时间
-XX:+UseCMSCompactAtFullCollection
在进行Full GC时启用内存碎片整理
-XX:CMSFullGCsBeforeCompaction=2
在整理内存碎片之前进行的Full GC的次数为2
-XX:+CMSClassUnloadingEnabled
方法区允许进行类的卸载,防止方法区内存溢出
-XX:+CMSPermGenSweepingEnabled
方法区的垃圾回收同时添加该参数,仅JDK1.6之前需要
-XX:SoftRefLRUPolicyMSPerMB=0
设置软引用对象的回收策略,在堆内存紧张时立即回收所有的软引用对象
-XX:MaxTenuringThreshold=5
新生代中的对象如果Age为5将被移动到老年代
-XX:PretenureSizeThreshold=3145728
大于3MB(3145728 byte)的对象直接存放在老年代
-XX:+DisableExplicitGC
禁用Syste.gc()代码进行Full GC,注意:有潜在的直接内存溢出可能
====================================
限于篇幅,无法对每个参数进行一一详解,理解每个VM Arguments参数的设置都需要对JVM原理的相关知识烂熟于心,并且还有更多的参数需要应用在生产环境,诸君努力!
相关推荐
性能调优不仅需要了解JVM参数,还需要关注参数的具体含义和应用。例如,“-Xms”和“-Xmx”分别用于设置JVM的初始堆内存和最大堆内存,“-Xss”用于设置线程堆栈大小,“-Xmn”用于设置年轻代内存大小。而“-XX”...
【JVM调优实战经验】 在Java开发中,JVM(Java Virtual Machine)的调优是提高应用程序性能的关键环节。JVM调优涉及到对内存管理...实践中应结合理论知识与实践经验,不断测试、监控、分析,确保应用的高效稳定运行。
《JVM调优实战解析》 ...通过理论学习和实践经验的积累,我们可以更好地理解和优化JVM,从而提高应用的性能和稳定性。在日常工作中,结合监控工具,深入源码,持续学习,是成为一名优秀的Java性能优化专家的必经之路。
在深入讨论JVM(Java虚拟机)调优之前,我们有必要先了解一下虚拟机的基本概念和堆栈...通过上述的分析和总结,我们可以得出,JVM调优是一个涉及多方面知识的复杂过程,需要开发者具备扎实的理论基础和丰富的实践经验。
然后,通过对JVM参数的调整,比如改变堆大小、设置垃圾回收器类型、优化新生代和老年代的比例等,来提升系统的性能。 总结来说,JVM调优是提高Java应用性能的关键环节,涉及到对内存分配、垃圾回收策略、对象生命...
【JVM调优视频理论及工具】主要涵盖了Java虚拟机(JVM)的优化实践与相关的分析工具。在Java开发中,JVM调优是提升应用程序性能的关键环节,尤其是在高并发、大数据处理等场景下,良好的JVM配置能显著提高系统效率。...
入门JVM调优不需要高深的基础,但需要理解一些核心概念,如垃圾回收算法、内存管理、JVM参数等。 2. Java虚拟机中的数据类型 Java虚拟机中的数据类型分为基本类型和引用类型。基本类型代表原始值,如整数和浮点数,...
5. **GC调优**:包括如何分析GC日志,理解GC停顿(Stop-the-World)事件,以及如何通过调整JVM参数来改善系统性能,如设置堆大小、新生代与老年代的比例、存活代的晋升策略等。 6. **性能监控与诊断工具**:如...
本主题将深入探讨JVM参数调优的重要性、原理以及如何进行测试和监控,以便找到最优配置。我们将不涉及具体代码,而是关注理论知识和实践策略。 首先,理解JVM的主要组成部分至关重要。JVM分为堆内存(Heap)、方法...
### Java-JVM调优总结 #### 一、引言 在现代软件开发中,Java 作为一种广泛使用的编程语言,其应用程序的性能优化至关重要。...希望本文能够帮助开发者更好地理解和掌握 JVM 调优的关键技术和实践方法。
在64位操作系统上,JVM理论上可以分配无限的内存,但在实际应用中,需要根据压力测试和线上运行情况合理分配内存。 垃圾在JVM中指的是没有被任何引用的对象,JVM通过两种主要算法来识别垃圾: 1. 引用计数算法:...
通过调整JVM参数,如-Xms、-Xmx设置堆大小,-XX:NewRatio调整新生代和老年代比例,可以实现性能优化。 6. 字节码文件结构深度剖析: .class文件包含类的元数据和字节码指令,理解字节码的构成和执行逻辑对于理解...
总的来说,JVM调优是一项涉及广泛的知识体系,需要结合理论、源码和实践,通过合理配置参数,利用各种工具进行监控和诊断,才能达到优化效果。这不仅需要对JVM的内部机制有深入理解,也需要对应用的运行特性有清晰的...
此外,JVM参数调优是一个复杂的过程,涉及到许多因素,如应用的特性、工作负载模式、硬件配置等。例如,为了减少Full GC的频率,可能需要调整新生代和老年代的比例,或者选择适当的GC策略。在进行调优时,应结合理论...
学习这些内容需要理论与实践相结合,理解底层原理,熟悉相关API,并通过实际项目去应用和验证。在这个过程中,你将能够构建出更高效、更稳定的Java应用程序。通过`Advanced-JAVA-master`这个项目,你可以找到示例...
例如,可能有一个模块展示了如何使用Zookeeper创建分布式锁,或者有一个配置文件展示了如何调整JVM参数以适应高并发环境。通过分析这些示例,我们可以更直观地了解分布式、并发和JVM调优的实际应用。 总结来说,...
通过调整JVM参数(如-Xms, -Xmx, -XX:NewRatio等),可以优化内存分配、GC行为和线程设置,达到性能最佳。 6. **编译优化**:JVM有即时编译(JIT,Just-In-Time)机制,将热点代码编译为本地机器码,提高执行效率。...
在Java开发过程中,JVM(Java虚拟机)的性能优化是一项至...开发者需要根据应用特性选择合适的垃圾回收策略,并通过调整JVM参数来优化内存分配和垃圾回收效率,同时利用各种监控工具进行实时诊断,以确保应用稳定运行。
在深入探讨JVM(Java虚拟机)的理论与实践结合时,...通过"理论与实践结合 解密JVM-day02"的学习,我们将不仅了解JVM的基本概念,还能掌握其在实际应用中的调优技巧,为开发高性能、低内存消耗的Java应用打下坚实基础。