☰
Java性能优化的50个细节,收藏!
2026/9/27 23:03:07 网站建设 项目流程

代码写法

用StringBuilder替代循环内字符串拼接;2. 避免在循环中创建对象,能复用就复用;3. 用基本类型替代包装类,减少装箱拆箱;4. 减少方法调用层级,但别牺牲可读性;5. 用局部变量替代反复访问的成员变量;6. 尽早return,减少嵌套层级;7. 用卫语句替代深层if-else;8. 避免在循环条件中调用方法,如list.size();9. 用System.arraycopy替代循环复制数组;10. 慎用异常,异常构造代价高昂。

集合与字符串

指定ArrayList初始容量,避免反复扩容;12. 用HashMap时预估容量,减少rehash;13. 遍历Map用entrySet,别用keySet再get;14. 用Arrays.asList注意返回的是固定大小列表;15. 字符串常量放前面,如"abc".equals(str)防NPE;16. 用String.valueOf替代+ "";17. 大量字符串拼接用StringJoiner或StringBuilder;18. 用EnumMap替代HashMap存储枚举键;19. 用ArrayDeque替代LinkedList做队列;20. 集合判空用isEmpty()而非size()==0。

并发与锁

锁的粒度尽量小,只锁必要代码块;22. 用ConcurrentHashMap替代同步HashMap;23. 读多写少用ReadWriteLock;24. 用AtomicInteger替代synchronized计数;25. 线程池用ThreadPoolExecutor手动创建,别用Executors;26. 设置合理的核心线程数和队列容量;27. 用CountDownLatch替代Thread.join();28. 避免死锁,按固定顺序获取锁;29. 用volatile保证可见性,但别替代锁;30.ThreadLocal用完必须remove,防内存泄漏。

JVM与GC

堆大小设成一样,避免动态扩容抖动;32. 新生代占堆1/3到1/4;33. 大对象直接进老年代,尽量避免;34. 用G1替代CMS,JDK9后默认;35. 设置-XX:MaxGCPauseMillis目标停顿;36. 打印GC日志,-Xlog:gc;37. 用jstat看GC频率,jmap看堆分布;38. 减少Full GC,从源头减少长命对象;39. 元空间设上限,防本地内存溢出;40. 栈大小按线程数权衡,-Xss别乱调。

数据库与缓存

索引不是越多越好,写操作会变慢;42. 用联合索引遵循最左前缀;43. 避免SELECT,只取需要字段;44. 分页查询用游标或延迟关联;45. 批量插入用rewriteBatchedStatements=true;46. 缓存穿透用布隆过滤器加空值缓存;47. 缓存击穿用互斥锁重建;48. 缓存雪崩给过期时间加随机偏移;49. 热点数据本地缓存加Redis两级;50. 缓存一致性用订阅binlog异步刷新。

五十个细节,不必一次全用上。挑当前项目最痛的三五个,改完测数据,再改下一批。性能优化是习惯,不是运动。今天少建一个临时对象,明天少一次Full GC,日积月累,系统自然轻快。收藏不等于掌握,动手才算数。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询