8.jvm字节码与java代码层面调优

常用代码优化方法

  • 尽量重用对象,不要循环创建对象,比如:for循环字符串拼接
  • 容器类初始化的时候指定长度
    List<String> collection = new ArrayList<String>(5);

tips: ArrayList底层是一个Object[]

Map<String,String> map = new HashMap<String,String>(32);

  • ArrayList随即遍历快,LinkedList添加删除快

tips: LinkedList底层是一个双向链表

  • 集合遍历尽量减少重复计算
    for (int i = 0, len = collection.size();i < len; i++) {}
    string.foreach

  • 使用Entry遍历Map
    for (Map.Entry<String,String> entry: map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    }

  • 大数据复制用System.arraycopy

  • 尽量使用基本类型而不是包装类型

Integer i = 100; (会进行Integer.valueOf(i)) 装箱操作
System.out.println(i);

Integer i1 = 100 ;
Integer i2 = 100;
System.out.println(i1==i2); => true (-128~127范围内,使用cache)

Integer i1 = 1000 ;
Integer i2 = 1000;
System.out.println(i1==i2); => false(-128~127范围外,新创建Integer)

  • 不要手动调用System.gc() :不可控
  • 及时消除过期对象的引用,防止内存泄漏
  • 尽量使用局部变量,减少变量的作用域
  • 尽量使用非同步的容器ArrayList vs Vector(不建议) Vector是同步容器
  • 尽量减少同步作用范围,synchronized方法 vs 代码块(推荐)

tips:
synchronized 方法 和 synchronized (this) 效用一样
static synchronized void f3() 和 static 方法里 加synchronized 代码块效用一样

  • ThreadLocal缓存线程不安全的对象,SimpleDateFormat(构造成本高,提高效率)
  • 尽量使用延迟加载
  • 尽量减少使用反射,加缓存
  • 尽量使用连接池、线程池、对象池、缓存
  • 及时释放资源,I/O流、Socket、数据库连接
  • 慎用异常,不要用抛异常来表示正常的业务逻辑
  • String操作尽量少用正则表达式(replace-推荐 vs replaceAll- 正则)
  • 日志输出注意使用不同的级别
  • 日志中参数拼接使用占位符
    log.info("orderId:" + orderId);不推荐
    log.info("orderId:{}" + orderId);推荐
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 1,939评论 0 47
  • 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响...
    Java大生阅读 133评论 0 0
  • Map 今天的主要内容 Map接口概述 Map集合的两种遍历方式通过键找值keySet通过键值对对象获取键和值涉及...
    须臾之北阅读 268评论 0 0
  • 代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰...
    dertch阅读 534评论 0 0
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,704评论 0 11