Java性能优化:10个立竿见影的技巧

Java性能优化:10个立竿见影的技巧 Java性能优化听起来高深但很多问题并不需要重构代码或更换框架。下面这10个技巧改动小、见效快做完立刻能感受到QPS提升或延迟下降。1. 循环内字符串拼接改用StringBuilderstr a在循环中会不断创建新String对象GC压力巨大。换成StringBuilder只创建一个可变对象循环越大效果越明显。这是最经典的优化没有之一。2. 集合初始化指定容量new ArrayList()默认容量10扩容时数组复制开销大。如果已知要存1000个元素直接new ArrayList(1000)省去多次扩容和复制。HashMap同理预估容量能显著减少rehash。3. 用基本类型替代包装类型Integer比int多一个对象头自动装箱拆箱还额外消耗CPU。局部变量、方法参数、循环计数器能用int就别用Integer。数据量大时内存和GC差距非常明显。4. 使用缓冲流进行I/O操作直接FileInputStream读文件每次read都是一次系统调用。包一层BufferedInputStream一次读8KB系统调用次数骤降。写文件同理BufferedWriter比FileWriter快数倍。5. 减少不必要的对象创建循环里new Date()、new SimpleDateFormat都是重灾区。SimpleDateFormat线程不安全但可以每个线程一个或改用DateTimeFormatter。能复用就复用别让GC天天加班。6. 缩小局部变量作用域变量声明离使用越近越好方法结束就能被回收。长生命周期的大对象会一直占用内存拖慢GC。把大对象拆小、用完置null虽然老生常谈但确实立竿见影。7. 用System.arraycopy复制数组手写for循环复制数组JIT未必能优化到极致。System.arraycopy是native方法底层用内存拷贝速度极快。集合之间的复制、数组扩容优先用它。8. 并发场景用ConcurrentHashMapCollections.synchronizedMap全表锁并发一高就排队。ConcurrentHashMap分段锁或CAS读几乎无锁写只锁桶。高并发下吞吐量差一个数量级换就对了。9. 合理设置JVM堆和垃圾回收器-Xms和-Xmx设成一样避免堆动态调整。低延迟用G1或ZGC吞吐优先用Parallel。默认参数适合开发不适合生产。调完重启监控GC日志效果肉眼可见。10. 懒加载加缓存避免重复计算单例饿汉式启动慢改懒汉式或静态内部类。频繁调用的方法结果不变就加缓存比如配置读取、正则编译。一次计算多次使用CPU省下来干正事。总结性能优化不一定要大动干戈。这10个技巧覆盖了字符串、集合、I/O、并发和JVM每个改动都不超过十行代码但累积起来能让系统快上一大截。先测量再优化用数据说话别凭感觉。从今天开始挑三个改到项目里你会回来感谢自己的。