代码性能优化

99 阅读2分钟

仅仅记录工作中的点滴

集合优化

  1. 如果预知集合长度,尽量初始化集合的时候集合长度。(集合扩容时,底层会有数据复制,当内存不足,还会有GC帮助清理,直至没有足够的空间)
  2. 小数据量时,使用for iStream 快。(小于1000都可以,你可以永远相信for i
  3. 不知道个数的时候,可以使用LinkedList。(我相信很少有业务去访问集合数组的随机下标的数据吧)
  4. 两个集合求交集,小集合驱动大集合。
  5. 对于一些与业务线程处理无关的操作,可以前置。比如说 策略排序,字段映射。

线程

  1. 关于线程池,这个需要结合实际情况,如果系统瓶颈就是线程资源不够,应该想着提升硬件能力,而使用多线程也是无意义的。
  2. 关于并发工具类的使用,CountDownLatch、Semaphore、CyclicBarrier。
  3. 使用CompletableFuture代替Future,前者有更加丰富的API,包括Task组合,尤其在多个任务有关联关系的时候尤为合适。
  4. 尽量初始化核心线程,避免影响到用户线程。
  5. 创建线程池后,记得增加 ShutDownHook

其他

  1. 代码运行慢,会和 Jit相关。还有系统刚启动,有些类的初始化并没有做完,所以通常刚发布完成的系统,前几个请求会很慢。(Jit 建议细细琢磨)
  2. 尽量使用基本数据类型。(基本数据类型会在栈上分配)
  3. 尽量使用循环,拒绝递归。(方法栈有自己的深度,受栈帧大小影响。1. 易OOM 2. 每调用一个方法jvm创建栈帧和方法安全检测增加耗时)