java 如何优化代码
代码优化方法
减少对象创建
避免在循环或高频调用方法中创建对象,优先使用对象池或静态对象。例如,将 String 拼接改为 StringBuilder。
使用高效的数据结构
根据场景选择合适的数据结构。高频查询用 HashMap,有序数据用 TreeMap,线程安全场景用 ConcurrentHashMap。
避免不必要的计算
将重复计算结果缓存起来。例如,循环中不变的表达式提到循环外,避免重复计算。
优化循环
减少循环内的操作,能用 for-each 时避免传统 for 循环。嵌套循环中,将小循环放在外层。
合理使用缓存
对频繁访问且不变的数据使用缓存(如 Guava Cache 或 Caffeine),减少数据库或网络请求。
性能分析工具
JProfiler
可视化分析内存、CPU 使用情况,定位性能瓶颈。
VisualVM
内置 JDK 工具,监控堆内存、线程和 GC 行为,支持插件扩展。

JMH 基准测试
通过微基准测试量化代码性能,避免主观优化。示例代码:
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class MyBenchmark {
@Benchmark
public void testMethod() {
// 被测代码
}
}
JVM 调优
调整堆内存
根据应用需求设置 -Xms 和 -Xmx,避免频繁 GC。例如:
java -Xms512m -Xmx1024m -jar app.jar
选择垃圾收集器
高吞吐场景用 Parallel GC,低延迟用 G1 GC 或 ZGC。通过参数调整:
-XX:+UseG1GC
减少 Full GC
监控 Old Gen 使用情况,避免内存泄漏。通过 -XX:+HeapDumpOnOutOfMemoryError 捕获堆转储。

并发优化
降低锁粒度
用 ConcurrentHashMap 替代 synchronized,或使用分段锁减少竞争。
使用无锁编程
对计数器等场景使用 AtomicLong 或 LongAdder,比同步块更高效。
线程池优化
根据任务类型配置线程池参数。CPU 密集型任务线程数接近核心数,IO 密集型可适当扩大。
代码规范
遵循 SOLID 原则
单一职责、开闭原则等提升代码可维护性,间接影响性能。
避免过度设计
在关键路径上保持代码简洁,减少不必要的抽象层。
代码审查
通过团队协作发现潜在性能问题,如 N+1 查询、低效算法等。






