1. 安装与配置合适的JDK版本
在Debian上,优先选择OpenJDK的LTS(长期支持)版本(如OpenJDK 11、17或21),通过apt包管理器安装以保障稳定性与安全性:
sudo apt update && sudo apt install openjdk-17-jdk
安装后通过java -version验证版本,使用update-alternatives工具管理多版本Java,确保应用使用目标版本。
2. 精准调整JVM内存参数
-Xms(初始堆大小)和-Xmx(最大堆大小)指定固定堆容量(如-Xms4g -Xmx4g),避免运行时堆扩容带来的性能损耗;-XX:NewRatio调整新生代(Young Generation)与老年代(Old Generation)的比例(如-XX:NewRatio=3表示新生代占堆的1/4),适合短生命周期对象多的应用;-XX:SurvivorRatio调整Eden区与幸存区(Survivor Space)的比例(如-XX:SurvivorRatio=8表示Eden区占新生代的8/10),优化Minor GC效率。3. 选择适配的垃圾回收器(GC)
根据应用场景选择GC策略:
-XX:+UseG1GC启用,可设置-XX:MaxGCPauseMillis=200(目标最大GC停顿时间,单位毫秒);-XX:+UseZGC启用(需Debian内核≥4.14);-XX:+UseConcMarkSweepGC启用(JDK 14及以上移除)。4. 优化JIT编译器设置
启用分层编译(Tiered Compilation)以提升热点代码的执行效率,通过-XX:+TieredCompilation开启(默认启用)。对于需要快速启动的小应用,可设置-XX:TieredStopAtLevel=1限制编译层级,减少编译时间。
5. 代码级性能优化
for(int i=0; i<1000000; i++) { String s = new String("x"); }),改用对象重用或基本类型;ArrayList替代LinkedList用于随机访问,HashMap替代TreeMap用于快速查找);StringBuilder(非线程安全)或StringBuffer(线程安全)替代+拼接(尤其在循环中),减少内存分配;6. 系统级配置优化
ulimit -n 65535临时增加单个进程可打开的文件数,修改/etc/security/limits.conf永久生效(添加* soft nofile 65535、* hard nofile 65535);/etc/sysctl.conf,添加net.core.somaxconn=65535(最大连接队列长度)、net.ipv4.tcp_max_syn_backlog=65535(SYN队列长度)、net.ipv4.ip_local_port_range=1024 65535(可用端口范围),运行sysctl -p使配置生效;7. 监控与分析性能瓶颈
jstat监控GC情况(jstat -gcutil <pid> 1000,每秒刷新一次)、jmap生成堆转储(jmap -dump:live,format=b,file=heap.hprof <pid>,分析内存泄漏)、VisualVM(图形化监控CPU、内存、线程);-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/gc.log参数记录GC日志,使用GCViewer等工具解析,优化GC频率与停顿时间。