学习JAVA程序性能优化第3天

常用优化组件和方法

  1. 缓冲
    缓冲区市一块特定的内存区域。开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统的性能。在日常生活中,缓冲的一个典例就是漏斗。
    由于I/O 操作很容易成为性能瓶颈,所以,尽可能在I/O读写中加入缓冲组件,以提高系统的性能。
  2. 缓存
    缓存也是为提升系统性能而开辟的内存空间。
    使用动态代理无需修改一个逻辑方法的代码,便可以为它加上缓存功能,提高其性能。
  3. 对象复用- “池”
    对象池化,它的核心思想是,如果一个对象被频繁请求使用,那么不必每次都生成一个实例,可以将这个类的一些实例保存在一个“池”中,待需要使用的时候直接从池中获取。
    只有对重量级对象使用对象池技术才能提高系统性能,对轻量级的对象使用对象池,可能反而会降低系统性能。
  4. 负载均衡 nginx(以后学习)

java 程序优化

  1. 字符串优化处理
    Java中String类的基本实现,它主要由3个部分组成:char 数组,偏移量和String的长度。Char 数组表示String的内容,它是String对象所表示字符串的超集。String的真实内容是需要由偏移量和长度在char数组中进行定位个截取。
    (1) 不变性
    (2) 针对常量池的优化
      String str = "a"; // 常量池
      String str1 = "b"; // 常量池
      String str2 = "a"+"b"; // 常量池
      String str3 = str+str1; // 用到StringBuilder对象
      String str4 ="ab"; // 常量池
      String str5 = new String("");
      System.out.println(str4==str2); // true
      System.out.println(str4==str3); // false

(3)StringBuffer 和StringBuilder
String 的 加法操作虽然会被优化,单“+”和“+=”尽量少用。
在无需考虑线程安全的情况下可以使用性能相对较好的StringBuilder,但若系统有线程安全需求,只能选择StringBuffer。
二 核心数据结构

  1. List 接口
    ArrayList和Vector 使用了数组实现,ArrayList线程不安全,Vector绝大部分方法都做了线程同步。
    LinkedList 使用了循环双向链表数据接口。
    在能有效地评估ArrayList数据大小初始值的情况下,指定容量大小能对性能有较大的提升。
  2. Map接口
    HashMap就是将key做hash算法,然后将hash值映射到内存地址,直接取得key所对应的数据。在HashMap中,底层数据结构使用的是数组,所谓的内存地址即数组的下标索引。
    HashMap 的性能在一定程度上取决于hashCode()的实现。一个好的hashCode()算法,可以尽可能减少冲突,从而提高HashMap的访问速度。
    LinkedHashMap 有序的。
    注意:不要在迭代器模式中修改被迭代的集合。如果这么做爆出.ConcurrentModificationException异常。这个特性适合于所有的集合类,包括hashMao,Vector,ArrayList等
    如果确定需要将排序功能个加入HashMap,使用Treemap,而不是在应用程序中实现排序。
  3. Set接口<–> 对应map
    Set集合的对象是不能重复的。
  4. 优化集合访问代码
    4.1 分离循环被重复调用的代码(例如:提起list.size)
    4.2 省略相同操作(record = list.get())
  5. 改善性能的技巧
    (1)慎用异常 try-catch
    (2)使用局部变量。调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度比较快,其他变量,如静态变量,实例变量等,都在堆中创建,速度比较慢。
    (3)对于一些工具类,应用使用static 方法实现,这样不仅可以加快函数调用的速度,同时,调用static方法也不需要生成类的实例,比调用实例方法更为方便,易用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值