代码写法用StringBuilder替代循环内字符串拼接2. 避免在循环中创建对象能复用就复用3. 用基本类型替代包装类减少装箱拆箱4. 减少方法调用层级但别牺牲可读性5. 用局部变量替代反复访问的成员变量6. 尽早return减少嵌套层级7. 用卫语句替代深层if-else8. 避免在循环条件中调用方法如list.size()9. 用System.arraycopy替代循环复制数组10. 慎用异常异常构造代价高昂。集合与字符串指定ArrayList初始容量避免反复扩容12. 用HashMap时预估容量减少rehash13. 遍历Map用entrySet别用keySet再get14. 用Arrays.asList注意返回的是固定大小列表15. 字符串常量放前面如abc.equals(str)防NPE16. 用String.valueOf替代 17. 大量字符串拼接用StringJoiner或StringBuilder18. 用EnumMap替代HashMap存储枚举键19. 用ArrayDeque替代LinkedList做队列20. 集合判空用isEmpty()而非size()0。并发与锁锁的粒度尽量小只锁必要代码块22. 用ConcurrentHashMap替代同步HashMap23. 读多写少用ReadWriteLock24. 用AtomicInteger替代synchronized计数25. 线程池用ThreadPoolExecutor手动创建别用Executors26. 设置合理的核心线程数和队列容量27. 用CountDownLatch替代Thread.join()28. 避免死锁按固定顺序获取锁29. 用volatile保证可见性但别替代锁30.ThreadLocal用完必须remove防内存泄漏。JVM与GC堆大小设成一样避免动态扩容抖动32. 新生代占堆1/3到1/433. 大对象直接进老年代尽量避免34. 用G1替代CMSJDK9后默认35. 设置-XX:MaxGCPauseMillis目标停顿36. 打印GC日志-Xlog:gc37. 用jstat看GC频率jmap看堆分布38. 减少Full GC从源头减少长命对象39. 元空间设上限防本地内存溢出40. 栈大小按线程数权衡-Xss别乱调。数据库与缓存索引不是越多越好写操作会变慢42. 用联合索引遵循最左前缀43. 避免SELECT只取需要字段44. 分页查询用游标或延迟关联45. 批量插入用rewriteBatchedStatementstrue46. 缓存穿透用布隆过滤器加空值缓存47. 缓存击穿用互斥锁重建48. 缓存雪崩给过期时间加随机偏移49. 热点数据本地缓存加Redis两级50. 缓存一致性用订阅binlog异步刷新。五十个细节不必一次全用上。挑当前项目最痛的三五个改完测数据再改下一批。性能优化是习惯不是运动。今天少建一个临时对象明天少一次Full GC日积月累系统自然轻快。收藏不等于掌握动手才算数。