Ubuntu下Java编译优化技巧
new String()),优先使用基本类型(如int代替Integer)和不可变对象(如String替代StringBuilder仅在频繁修改时使用后者);通过对象池(如数据库连接池)重用对象,降低垃圾回收(GC)频率。HashMap替代ArrayList进行快速查找,用LinkedList替代ArrayList进行频繁插入/删除),采用时间复杂度更低的算法(如快速排序替代冒泡排序)。arr.length、常量表达式)提取到循环外部;减少循环嵌套层数,避免“循环嵌套地狱”。BufferedInputStream、BufferedOutputStream、BufferedReader)替代普通流,减少磁盘IO次数;采用批量读写(如Files.readAllBytes、Files.write)替代逐行读写。ExecutorService管理线程池、CompletableFuture处理异步任务)提升多核利用率,避免创建过多线程导致上下文切换开销。javac的-O1(基本优化,如常量折叠)、-O2(增强优化,如方法内联)、-O3(最高级别优化,如循环展开)选项提升代码性能;注意-O3可能增加编译时间和代码体积,需权衡性能与可维护性。-march(指定目标处理器架构,如-march=native自动适配当前机器)和-mtune(优化指令调度,如-mtune=generic适配通用处理器)生成针对性代码,提升执行效率。-ffast-math选项放宽IEEE 754浮点运算精度要求,加速sin、cos、sqrt等数学函数计算;适用于对精度要求不高的场景(如图形渲染)。-funroll-loops选项展开循环(如将for(int i=0; i<10; i++)展开为10次重复代码),减少循环控制开销;过度展开可能导致代码膨胀,需测试验证效果。make -jN(N为CPU核心数,如-j4)或javac的--release选项(如javac --release 17 -d output src/*.java)并行编译多个源文件,充分利用多核处理器提升编译速度。-Xms(初始堆大小,如-Xms2g)和-Xmx(最大堆大小,如-Xmx4g)设置合理的内存分配,避免频繁扩容导致的GC停顿;建议-Xms与-Xmx设置为相同值,减少内存抖动。-XX:+UseG1GC)、CMS(适用于低延迟场景,已废弃,如-XX:+UseConcMarkSweepGC)、Parallel GC(适用于高吞吐量场景,如-XX:+UseParallelGC)。-XX:+TieredCompilation,默认开启)提升启动速度(将热点代码编译为机器码);调整内联阈值(-XX:InlineSmallCode,如-XX:InlineSmallCode=1000,设置方法体大小阈值,超过则内联)减少方法调用开销。-XX:MaxGCPauseMillis,如-XX:MaxGCPauseMillis=200,单位毫秒,适用于G1);调整新生代与老年代比例(-XX:NewRatio,如-XX:NewRatio=2,新生代占堆的1/3)优化GC效率。sudo apt update && sudo apt upgrade命令更新Ubuntu系统和所有软件包(包括GCC、JDK),获取最新的性能优化和安全补丁。ccache(sudo apt install ccache)缓存预处理结果,避免重复编译未修改的源文件;通过export CC="ccache gcc"设置默认编译器,提升编译速度。distcc(sudo apt install distcc)将编译任务分发到多台计算机,利用集群资源缩短编译时间;需配置DISTCC_HOSTS环境变量(如export DISTCC_HOSTS="localhost 192.168.1.100")。top(查看CPU/内存占用)、htop(图形化监控)、gnome-system-monitor(系统监控工具)识别性能瓶颈(如CPU过载、内存不足);根据监控结果调整系统配置(如增加内存、关闭不必要的服务)。systemctl list-unit-files --state=enabled查看启动服务,禁用不需要的服务(如sudo systemctl disable bluetooth),释放系统资源。