Java 性能优化的 55 个细节

  • 1. 尽量在合适的场合使用单例 

  • 2. 尽量避免随意使用静态变量

  • 3. 尽量避免过多过常的创建Java对象

  • 4. 尽量使用final修饰符

  • 5. 尽量使用局部变量

  • 6. 尽量处理好包装类型和基本类型两者的使用场所

  • 7. 慎用synchronized,尽量减小synchronize的方法

  • 9. 尽量不要使用finalize方法

  • 10. 尽量使用基本数据类型代替对象

  • 11. 多线程在未发生线程安全前提下应尽量使用HashMap、ArrayList

  • 12. 尽量合理的创建HashMap

  • 13. 尽量减少对变量的重复计算

  • 14. 尽量避免不必要的创建

  • 15. 尽量在finally块中释放资源

  • 16. 尽量使用移位来代替'a/b'的操作

  • 17.尽量使用移位来代替'a\*b'的操作

  • 18. 尽量确定StringBuffer的容量

  • 19. 尽量早释放无用对象的引用

  • 20. 尽量避免使用二维数组

  • 21. 尽量避免使用split

  • 22. ArrayList & LinkedList

  • 23. 尽量使用System.arraycopy ()代替通过来循环复制数组

  • 24. 尽量缓存经常使用的对象

  • 25. 尽量避免非常大的内存分配

  • 26. 慎用异常

  • 27. 尽量重用对象

  • 28. 不要重复初始化变量

  • 29. 在java+Oracle的应用系统开发中,java中内嵌的SQL语言应尽量使用大写形式,以减少Oracle解析器的解析负担。

  • 30. 在java编程过程中,进行数据库连接,I/O流操作,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销。

  • 31. 过分的创建对象会消耗系统的大量内存,严重时,会导致内存泄漏,因此,保证过期的对象的及时回收具有重要意义。JVM的GC并非十分智能,因此建议在对象使用完毕后,手动设置成null。

  • 32. 在使用同步机制时,应尽量使用方法同步代替代码块同步**。**

  • 33. 不要在循环中使用Try/Catch语句,应把Try/Catch放在循环最外层

  • 34. 通过StringBuffer的构造函数来设定他的初始化容量,可以明显提升性能

  • 35. 合理使用java.util.Vector

  • 38. 不用new关键字创建对象的实例

  • 39. 不要将数组声明为:public static final

  • 40. HaspMap的遍历:

  • 41. array(数组)和ArrayList的使用

  • 42. 单线程应尽量使用 HashMap, ArrayList,除非必要,否则不推荐使用HashTable,Vector,她们使用了同步机制,而降低了性能。

  • 43. StringBuffer,StringBuilder的区别在于:java.lang.StringBuffer 线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。StringBuilder与该类相比,通常应该优先使用StringBuilder类,因为她支持所有相同的操作,但由于她不执行同步,所以速度更快。为了获得更好的性能,在构造StringBuffer或StringBuilder时应尽量指定她的容量。当然如果不超过16个字符时就不用了。相同情况下,使用StringBuilder比使用StringBuffer仅能获得10%~15%的性能提升,但却要冒多线程不安全的风险。综合考虑还是建议使用StringBuffer。

  • 44. 尽量使用基本数据类型代替对象。 

  • 45. 使用具体类比使用接口效率高,但结构弹性降低了,但现代IDE都可以解决这个问题。

  • 46. 考虑使用静态方法,如果你没有必要去访问对象的外部,那么就使你的方法成为静态方法。她会被更快地调用,因为她不需要一个虚拟函数导向表。这同事也是一个很好的实践,因为她告诉你如何区分方法的性质,调用这个方法不会改变对象的状态。

  • 47. 应尽可能避免使用内在的GET,SET方法。

  • 48.避免枚举,浮点数的使用。

  • 49、避免在循环条件中使用复杂表达式

  • 50、为'Vectors' 和 'Hashtables'定义初始大小

  • 51、在finally块中关闭Stream

  • 52、使用'System.arraycopy ()'代替通过来循环复制数组,例子:

  • 53、让访问实例内变量的getter/setter方法变成”final”

  • 54、对于常量字符串,用'String' 代替 'StringBuffer'

  • 55、在字符串相加的时候,使用 ' ' 代替 " ",如果该字符串只有一个字符的话

  转自 CSDN 魏来码农  https://blog.csdn.net/qfguan/article/details/121036716?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.615389&depth_1-utm_source=distribute.pc_relevant_t0.615389

posted @ 2021-11-13 17:27  SHINIAN200  阅读(59)  评论(0)    收藏  举报