(1)调优领域

  • 内存
  • 锁竞争
  • cpu占用
  • io

(2) 调优目标

  • 高吞吐量(科***算):ParrellelGC
  • 还是低延迟(互联网项目):CMS、G1、ZGC
  • hotspot外的虚拟机:zing...

(3) 代码复核

查看full gc前后的内存占用,考虑以下几个问题。

  • 数据量是不是太多?下面代码就会加载大量数据到堆内存中。
resultSet = statement.executeQuery("select * from xxx");

应该改为:

resultSet = statement.executeQuery("select * from xxx limit n");
  • 数据表示太臃肿?
    • 对象用到什么数据项查什么数据项
    • 对象大小 Integer24byte ,int24byte
  • 是否存在内存泄漏?如:
static Map map = new HashMap();

对长期存活的对象建议使用弱引用、软引用。

对于缓存类型的数据建议使用第三方缓存实现,如redis。