java代码如何优化
代码优化方法
减少对象创建
频繁的对象创建会导致垃圾回收压力增大。使用对象池或重用现有对象,尤其在循环中避免重复创建临时对象。对于不可变对象(如String),考虑使用StringBuilder拼接字符串。
选择合适的数据结构
根据场景选择高效的集合类。例如:
- 频繁查询用
HashMap(O(1)复杂度) - 有序数据用
TreeMap(O(log n)复杂度) - 线程安全场景用
ConcurrentHashMap替代Hashtable
算法优化
将时间复杂度高的算法(如O(n²))替换为更优方案。例如排序算法优先选择Arrays.sort()(基于快速排序/归并排序),避免冒泡排序。
内存管理技巧
及时释放资源
数据库连接、文件流等显式调用close(),或使用try-with-resources语法自动关闭:
try (FileInputStream fis = new FileInputStream("file.txt")) {
// 自动关闭资源
}
避免内存泄漏
静态集合长期持有对象引用会导致内存无法回收。使用WeakHashMap或定期清理缓存,监听器及时注销。
并发性能提升
减少锁竞争
- 使用
ConcurrentHashMap代替同步的Hashtable - 读写分离场景采用
ReadWriteLock - 考虑无锁编程(如
AtomicInteger)
线程池优化
根据任务类型配置线程池参数:
- CPU密集型任务:线程数 ≈ CPU核心数
- IO密集型任务:线程数可适当增加
- 使用
ThreadPoolExecutor自定义拒绝策略
JVM层面调整
合理设置堆大小
通过JVM参数调整内存区域,例如:
-Xms和-Xmx设置初始/最大堆内存-XX:NewRatio调整新生代与老年代比例
选择高效GC算法
根据应用特点选择垃圾回收器:
- 低延迟:G1或ZGC
- 高吞吐量:Parallel GC
- 小堆应用:Serial GC
工具辅助分析
性能监控工具
- VisualVM:实时监控CPU/内存使用
- JProfiler:分析内存泄漏和热点方法
- Arthas:在线诊断JVM状态
基准测试
使用JMH(Java Microbenchmark Harness)进行精准性能测试,避免手工测试误差:
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class MyBenchmark {
@Benchmark
public void testMethod() {
// 被测代码
}
}






