码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA性能优化

时间:2019-10-18 14:12:48      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:不可   调用   访问   包装类   空间   性能优化   字符   不能   空闲   

真正影响JAVA程序性能的,就是碎片化。碎片是JAVA堆内存中的空闲空间,可能是TLAB剩余空间,也可能是被释放掉的具有较长生命周期的小对象占用的空间。

  1. 减少new对象。每次new对象之后,都要开辟新的内存空间。这些对象不被引用之后,还要回收掉。因此,如果最大限度地合理重用对象,或者使用基本数据类型替代对象,都有助于节省内存;

  2. 多使用局部变量,减少使用静态变量。局部变量被创建在栈中,存取速度快。静态变量则是在堆内存;

  3. 避免使用finalize,该方法会给GC增添很大的负担;

  4. 如果是单线程,尽量使用非多线程安全的,因为线程安全来自于同步机制,同步机制会降低性能。例如,单线程程序,能使用HashMap,就不要用HashTable。同理,尽量减少使用synchronized

  5. 用移位符号替代乘除号。eg:a*8应该写作a<<3

  6. 对于经常反复使用的对象使用缓存;

  7. 尽量使用基本类型而不是包装类型,尽量使用一维数组而不是二维数组;

  8. 尽量使用final修饰符,final表示不可修改,访问效率高

  9. 单线程情况下(或者是针对于局部变量),字符串尽量使用StringBuilder,比StringBuffer要快;

  10. String为什么慢?因为String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。如果不能保证线程安全,尽量使用StringBuffer来连接字符串。这里需要注意的是,StringBuffer的默认缓存容量是16个字符,如果超过16,apend方法调用私有的expandCapacity()方法,来保证足够的缓存容量。因此,如果可以预设StringBuffer的容量,避免append再去扩展容量。如果可以保证线程安全,就是用StringBuilder。

JAVA性能优化

标签:不可   调用   访问   包装类   空间   性能优化   字符   不能   空闲   

原文地址:https://www.cnblogs.com/Yanss/p/11697870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!