Java在Ubuntu上高效运行的优化策略
java -version验证版本,避免使用过时的JDK(如Java 8及以下版本),新版本通常包含性能改进与安全修复。~/.bashrc文件,添加JAVA_HOME(指向JDK安装路径,如/usr/lib/jvm/jdk-11.0.2)、PATH(包含$JAVA_HOME/bin)和CLASSPATH(包含当前目录与JDK库路径)。执行source ~/.bashrc使配置生效,确保终端能直接调用java、javac命令。-Xms(初始堆大小)和-Xmx(最大堆大小)固定堆内存,避免运行时动态调整带来的性能波动。建议设置为相同值(如-Xms4g -Xmx4g),防止堆内存频繁扩容导致Full GC。-XX:MaxGCPauseMillis设定期望的最大GC停顿时间(如-XX:MaxGCPauseMillis=200);-XX:+UseParallelGC启用。-XX:+TieredCompilation),兼顾启动速度与长期运行性能,尤其适合微服务或短期任务。String str = new String("hello")),优先使用对象池(如Apache Commons Pool)或复用对象(如StringBuilder替代字符串拼接)。HashMap用于快速查找、ArrayList用于随机访问),避免使用LinkedList(插入删除性能差)或TreeMap(排序开销大);优先选择时间复杂度低的算法(如O(n)的快速排序替代O(n²)的冒泡排序)。try-with-resources语句自动关闭数据库连接、文件流等资源,避免内存泄漏;使用缓存框架(如Caffeine、Ehcache)缓存频繁访问的数据(如热点配置、数据库查询结果),减少重复计算与IO操作。/etc/sysctl.conf文件,优化以下参数:
vm.swappiness=10:降低交换空间使用率(值越小,系统越倾向于使用物理内存);fs.file-max=100000:增加系统最大文件描述符数(默认1024可能不足,适合高并发应用);net.core.somaxconn=65535:增大TCP监听队列长度(避免连接被拒绝);
执行sudo sysctl -p使配置生效。ulimit -n 65535临时提高当前用户的文件描述符限制,或编辑/etc/security/limits.conf文件(添加* soft nofile 65535、* hard nofile 65535)永久生效,避免因文件描述符耗尽导致应用崩溃。systemctl list-unit-files --state=enabled查看当前启用的服务,禁用不需要的服务(如cups打印服务、bluetooth蓝牙服务),减少系统资源消耗。jstat监控GC情况(如jstat -gc <pid> 1000每秒输出一次GC统计)、jmap查看堆内存分布(如jmap -heap <pid>)、jstack分析线程状态(如jstack <pid>查找死锁);