Java程序在Debian上的性能调优策略
HashMap替代List用于快速查找,StringBuilder替代字符串拼接避免循环内创建新对象)。for循环内创建临时对象)。int)替代包装类型(如Integer),减少自动装箱/拆箱的性能开销。-Xms)和最大堆(-Xmx)为相同值(如-Xms4g -Xmx4g),避免堆内存动态调整带来的性能波动。-XX:+UseG1GC启用,配合-XX:MaxGCPauseMillis设置最大停顿时间(如-XX:MaxGCPauseMillis=200)。-XX:+UseZGC启用。-XX:NewRatio,如-XX:NewRatio=3表示新生代占堆的1/4),优化年轻对象回收效率;调整Eden区与Survivor区比例(-XX:SurvivorRatio,如-XX:SurvivorRatio=8表示Eden:Survivor=8:1:1)。-XX:+TieredCompilation)提升热点代码编译效率,减少编译时间;设置编译阈值(-XX:CompileThreshold=1000)降低编译频率。ulimit -n 65535临时设置,或修改/etc/security/limits.conf永久生效(添加* soft nofile 65535、* hard nofile 65535)。/etc/sysctl.conf,调整网络与I/O参数:
net.core.somaxconn=65535:增加TCP连接队列长度,避免连接拒绝。net.ipv4.tcp_max_syn_backlog=65535:增加SYN队列长度,提升TCP连接建立效率。net.ipv4.ip_local_port_range=1024 65535:扩大本地端口范围,支持更多并发连接。
执行sysctl -p使配置生效。WHERE、JOIN条件中的列)创建索引,避免全表扫描;使用复合索引时遵循最左前缀原则。SELECT *(只查询所需列),减少数据传输量;合理使用JOIN(避免笛卡尔积),优先使用内连接(INNER JOIN);对复杂查询进行EXPLAIN分析,优化执行计划。INSERT INTO ... VALUES (...), (...)),使用JDBC的addBatch()与executeBatch()方法,减少数据库交互次数(如每1000条提交一次)。Runtime.getRuntime().availableProcessors())设置线程池大小(如new ThreadPoolExecutor(corePoolSize, corePoolSize * 2, ...)),避免线程过多导致上下文切换开销;使用有界队列(如ArrayBlockingQueue)防止任务堆积。synchronized方法拆分为同步块),使用并发集合(如ConcurrentHashMap替代Hashtable、CopyOnWriteArrayList替代Vector)替代同步容器;优先使用读写锁(ReentrantReadWriteLock)提升读多写少场景的并发性能。AtomicInteger、AtomicLong)替代volatile+synchronized,减少锁竞争。jstat监控GC情况(如jstat -gcutil <pid> 1000每秒输出GC统计)、jmap生成堆转储(如jmap -dump:live,format=b,file=heap.hprof <pid>分析内存泄漏)、jstack查看线程状态(如jstack <pid>排查死锁)。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/gc.log),通过日志分析GC停顿时间与频率,调整GC策略;记录应用日志(如使用Logback),分析慢请求与异常。