JVM参数调优:精准配置内存参数
-Xms(初始堆内存)和-Xmx(最大堆内存)参数指定堆内存范围,建议将两者设为相同值(如-Xms2g -Xmx2g),避免运行时堆大小动态调整带来的性能波动。-XX:NewRatio(新生代与老年代的比例,默认值为2,即新生代占1/3)和-XX:SurvivorRatio(新生代中伊甸区与幸存区的比例,默认值为8)参数,优化垃圾回收时的对象晋升效率(如-XX:NewRatio=3 -XX:SurvivorRatio=8)。-XX:+UseG1GC),平衡吞吐量与低延迟;追求高吞吐量可选择Parallel GC(-XX:+UseParallelGC);低延迟需求可选择CMS(-XX:+UseConcMarkSweepGC,已逐步被G1取代)。-XX:MaxGCPauseMillis参数设定期望的最大垃圾回收停顿时间(如-XX:MaxGCPauseMillis=200,单位为毫秒),指导垃圾回收器调整策略,减少对应用的影响。代码层面优化:减少内存消耗与泄漏
String、ArrayList),尽量重用对象(如将String拼接改为StringBuilder)。HashMap,有序数据用TreeMap;频繁插入删除用LinkedList),优化算法复杂度(如用快速排序替代冒泡排序),降低内存占用与CPU消耗。WeakReference)或软引用(SoftReference)管理缓存(如WeakHashMap),确保缓存对象在内存不足时可被回收;及时释放资源(如关闭数据库连接、文件流),避免资源占用。系统级优化:增强系统支撑能力
/etc/security/limits.conf,添加* soft nofile 65535、* hard nofile 65535),调整网络缓冲区大小(net.core.rmem_max、net.core.wmem_max),提升I/O与网络性能。sudo fallocate -l 1G /swapfile(创建1GB Swap文件)、sudo chmod 600 /swapfile(设置权限)、sudo mkswap /swapfile(格式化)、sudo swapon /swapfile(启用);永久生效需在/etc/fstab中添加/swapfile none swap sw 0 0。free -m查看内存使用情况、top找出高内存进程、vmstat 1监控系统整体性能(如内存、CPU、I/O),及时发现资源瓶颈。垃圾回收优化:针对性调整GC策略
-XX:+UseG1GC),高吞吐量选Parallel GC(-XX:+UseParallelGC),低延迟选CMS(-XX:+UseConcMarkSweepGC,需注意CMS已逐渐被G1取代)。-XX:InitiatingHeapOccupancyPercent(IHOP,触发并发GC的堆占用比例,默认45)参数,根据应用内存使用模式调整GC触发时机(如-XX:InitiatingHeapOccupancyPercent=35,提前触发GC减少停顿)。-XX:ParallelGCThreads(并行GC线程数,默认为CPU核心数)和-XX:ConcGCThreads(并发GC线程数,默认为ParallelGCThreads的1/4)参数,根据CPU核心数调整线程数(如8核CPU可设为-XX:ParallelGCThreads=8 -XX:ConcGCThreads=2),提升GC效率。监控与分析:持续优化内存使用
jstat监控GC情况、jmap生成堆转储文件、jstack分析线程堆栈)或图形化工具(VisualVM、Java Mission Control、Eclipse MAT),实时监控内存使用、GC频率、线程状态等指标。-Xloggc:/path/to/gc.log(指定GC日志路径)和-XX:+PrintGCDetails(打印GC详情)参数开启GC日志,分析日志中的GC停顿时间、频率、回收效果(如Full GC次数过多),针对性调整GC参数。