Ubuntu优化Java应用程序启动速度的方法
-Xms
(初始堆大小)和-Xmx
(最大堆大小)设置相同的值(如-Xms512m -Xmx512m
),避免堆内存动态调整带来的启动开销。根据应用内存需求合理分配,避免过大或过小。-XX:+UseG1GC
,适用于大堆内存)、ZGC(-XX:+UseZGC
,超低延迟)或Shenandoah(-XX:+UseShenandoahGC
,低暂停时间)垃圾回收器,减少启动期间的GC停顿。-XX:TieredCompilation
参数开启JIT分层编译,加快热点代码编译速度,缩短启动时间。-Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=<path>
参数,预先存储常用类的元数据,减少类加载时间(需提前生成共享归档文件)。new String()
),使用对象池(如Apache Commons Pool)复用对象,降低GC压力。StringBuilder
代替+
拼接字符串(尤其在循环中),减少临时String
对象的生成。HashMap
代替ArrayList
进行快速查找、ConcurrentHashMap
代替synchronized HashMap
提升并发性能),降低操作复杂度。mvn dependency:tree
),移除未使用的第三方库,降低类加载和初始化时间。sudo apt clean
清理APT缓存,删除不再使用的软件包(sudo apt autoremove
),释放磁盘空间,避免缓存占用过多资源。systemctl list-unit-files --type=service
列出所有服务,禁用不需要的服务(如sudo systemctl disable bluetooth.service
),减少系统资源占用。/etc/sysctl.conf
文件,添加vm.swappiness=10
(减少交换分区使用)、fs.file-max=100000
(增加文件描述符限制)、net.core.somaxconn=65535
(提升TCP连接队列长度),优化系统性能。async-profiler
生成火焰图,直观展示启动过程中的耗时方法;或使用JDK自带工具(jstat
监控GC、jstack
分析线程、jmap
查看内存占用),定位性能瓶颈。