JVM性能调优(二)
来源:互联网 发布:网络投票刷票器 编辑:程序博客网 时间:2024/05/22 15:26
上篇了解完JVM的具体构造和基本的垃圾回收机制后,接下来会操作JVM的性能调优。
1、堆大小设置
JVM堆大小取决于操作系统,最大可以完全占据系统内存。
Java -Xmx 2048m -Xms 2048m -Xmn 2g -Xss 128K
-Xmx 2048m :最大堆设置2048M
-Xms 2048m:最小堆设置2048M,通常最大最小堆设置一样,避免JVM回收后还需要分配堆内存。
-Xmn 2g:设置新生代大小
-Xss:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
2、设置新生代比例,设置年老代大小
Java -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4,表示年轻代:年老代=1:4
-XX:SurvivorRatio=4,表示年轻代中Eden区与Survivor区的大小比值,两个Survivor区与一个Eden区的比值为2:4
-XX:MaxPermSize=16m,设置年老代大小为16M,一般此值固定
-XX:MaxTenuringThreshold=0,设置垃圾最大年龄。如果设置为0,表示年轻代对象不经过Survivor区直接接入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代被回收的概率。
3、回收器的选择
吐吞量优先,选择并行收集器
java -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy
-XX:+UseParallelGC,表示年轻代使用并行收集器
-XX:ParallelGCThreads=20,配置并行收集器的线程数为20
-XX:+UseParallelOldGC,年老代配置收集器为并行收集器,JDK1.6以后支持年老代收集器配置
-XX:MaxGCPauseMillis=100,设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
-XX:+UseAdaptiveSizePolicy,设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低响应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
响应时间优先,选择并发收集器
Java -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC,设置年老代为并发收集器,
-XX:+UseParNewGC,年轻代为并行收集器
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
因为并行收集器不会堆内存空间进行压缩、整理,运行一段时间后会产生垃圾碎片,此值设置运行多少次GC以后对内存空间进行压缩、整理。
4、打印JVM GC运行信息
-XX:+PrintGC,打印GC信息
-XX:+PrintGCDetails,打印GC详细信息
-XX:+PrintGCTimeStamps,
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。
-XX:PrintHeapAtGC:打印GC前后的详细堆栈信息。
-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析。
5、调优总结
吞吐量优先:年轻代尽量大,年老代小,这样可以减少到达年老代的对象的数量,尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象。
响应时间优先:年轻代尽量设大,减少年轻代垃圾回收的频率,减少年轻代对象到达年老代的数量。年老代设置为并发收集器,如果设置过小,垃圾挥手的频率变高,碎片较多;如果设置过大,垃圾回收的时间变长。
- JVM性能调优(二)
- JVM性能调优
- JVM性能调优
- JVM性能调优
- JVM性能调优
- JVM性能调优
- JVM性能调优
- JVM性能调优
- JVM性能调优
- JVM性能调优
- jvm性能调优
- JVM性能调优
- jvm性能调优
- jvm性能调优
- JVM性能调优
- JVM 性能调优
- JVM性能调优
- JVM性能调优
- typedef常见用法
- [bzoj4816][SDOI2017]数字表格
- remove copyright box on a paper written in LaTex
- Mac下MySQL卸载方法
- Different Ways to Add Parentheses
- JVM性能调优(二)
- 配置个人shadowsocks的一些记录
- 启用第三方Chrome插件
- VS error LNK2001无法解析的外部符号_CrtDbgReportW
- 【软件安全】使用ollydbg手动修改可执行文件
- 【类加载器】类加载器的原理及其使用方式
- 跟小博老师一起学习数据库 ——函数
- 1
- Codeforces 739B Alyona and a tree (树上差分+二分)