// 反面案例:字符串拼接
String result = "";
for (int i=0; i<10000; i++) {
result += i; // 产生大量临时对象
}
// 优化方案:使用StringBuilder
StringBuilder sb = new StringBuilder(10000);
for (int i=0; i<10000; i++) {
sb.append(i);
}
String result = sb.toString();
3.2 集合类优化
集合类型
时间复杂度
优化建议
ArrayList
get O(1), add O(1)~O(n)
初始化预估容量(避免扩容)
LinkedList
add/remove O(1), get O(n)
避免随机访问,优先用ArrayDeque替代
HashMap
get/put O(1)
设置合理初始容量与负载因子(0.75)
ConcurrentHashMap
分段锁保证线程安全
优先于Collections.synchronizedMap
3.3 反射优化策略
缓存Method/Field对象避免重复查找
使用MethodHandle(JDK7+)替代传统反射
采用字节码增强框架(如Byte Buddy)生成高效代码
4. 并发编程优化
4.1 锁优化技术
java复制代码
// 偏向锁 -> 轻量级锁 -> 重量级锁 升级过程
// 优化案例:减小锁粒度
class Account {
private final Object lock = new Object();
void transfer(Account target, int amount) {
synchronized (lock) { // 细粒度锁
// 转账逻辑
}
}
}
4.2 无锁化设计
java复制代码
// 使用AtomicLong替代synchronized
private final AtomicLong counter = new AtomicLong();
public long increment() {
return counter.incrementAndGet();
}
// LongAdder优化高并发计数
private final LongAdder adder = new LongAdder();
public void add(long x) {
adder.add(x);
}
4.3 线程池调优
java复制代码
// 自定义线程池参数
ThreadPoolExecutor executor = new ThreadPoolExecutor(
4, // 核心线程数(CPU密集型建议N+1)
16, // 最大线程数(IO密集型建议2N)
60, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000), // 队列容量根据业务设置
new CustomThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
// 监控关键指标
executor.getActiveCount(); // 活动线程数
executor.getQueue().size(); // 队列堆积量
executor.getCompletedTaskCount(); // 完成任务数
5. 数据库性能优化
5.1 索引优化策略
sql复制代码
-- 复合索引最左匹配原则
CREATE INDEX idx_user ON orders(user_id, status);
-- 覆盖索引优化
EXPLAIN SELECT user_id FROM orders WHERE status = 'PAID';
-- 索引失效场景:
-- 1. 对字段使用函数操作(如UPPER(status))
-- 2. 隐式类型转换(如varchar列用数字查询)
-- 3. 前导通配符LIKE '%value'