Java性能优化之高性能JAVA代码的若干个习惯
创建对象:
1.避免在循环体中创建对象,循环前应该创建对象,避免浪费更多内存空间和增加GC负担
这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的错误,例如下面的代码:
for (int i = 0; i < 10000; i ++) {
Object obj = new Object(); //每次都在栈中创建了对象引用obj
System.out.println("obj= "+ obj);
}
上面代码的书写方式相信对你来说不会陌生,也许在以前的应用开发中你也这样做过,尤其是在枚举一个Vector对象中的对象元素的操作中经常会这样书写,但这却违反了上述规则,因为这样会浪费较大的内存空间,正确的方法如下所示:
Object obj = null; //在循环外创建对象引用,只是在栈中创建了一个对象引用obj
for (int i = 0; i < 10000; ++i) {
obj = new Object();
System.out.println("obj= "+ obj);
}
采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象应用,浪费大量的内存空间,而且增大了系统做垃圾回收的负荷。因此在循环体中声明创建对象的编写方式应该尽量避免。
2.数据格式化首选操作符格式化,即‘+’号,次选其他方法MessageFormat
3.尽量用对象的valueOf转换对象。eg:BigDecimal.valueOf(12.00);
类和接口:
1.复合优于继承(指extends)
继承(extends)中,构造方法中决不能调用可被覆盖的方法(@override);clone和readObject也不可以调用可覆盖方法
2.接口优于抽象类
3.尽量不要用接口定义常量,常量可用工具类或枚类型
其他:
1.集合都定义泛型,优先使用for循环
异常:(少用异常)
受检异常:exception 调用者希望有适当的恢复机制,就用受检异常
未受检异常:RuntimeException or ERROR 不必声明
失败原子性:失败的方法调用应该使对象保持在调用之前的状态
实现方法:1.设计不可变对象 2.执行操作前检查参数有效性或调整计算的处理过程(先处理不发生状态变化的逻辑)
3.提供恢复代码4.在对象的临时拷贝上执行操作
性能相关:
1.尽量产生少的对象
a.如果一个对象能重复使用,可以不用每次都new
2.尽量产生少的函数调用
a.inline
b.在new 一个带多个属性的对象时候,尽量采用构造初始化函数,少用set形式
3.循环处理
a.不用try{}catch{}
b.使用for
c.原则1
4.区别处理基本类型类和包装类型类
基本类型数据产生和处理在栈中,包装类型是对象,会在堆中产生实例,JVM对包装类处理首先会调用valeOf得到实际值,再做其他操作
a.适用包装类型的场合:集合类对象,有对象方面需求时候
b.其他提倡使用基本类型
5.避免产生JVM无法马上回收的无用的引用的对象
比如数组或其他集合中某些个对象无用了,要手工释放对象:obj =null;
6.字符串处理
拼接:StringBuildder(JKD1.5)、StringBuffer
7.数组拷贝
System.arrayCopy 是native调用
8.多线程
a.尽量避免使用多线程
b.synchronized func(){} 比 func(){synchronized(this){}} 上高效,前提 后一种锁的代码片段比较少
9.系统间调用
a.远程调用尽量减少远程调用的次数,比方使用粗粒度传输对象
b.同一系统(进程)间调用内使用本地接口,不要用远程
c.webService适用公开对外发布接口,针对不同平台系统,同一平台间调用尽量不要用。
比方都是java平台,可以用hessian协议
Java性能优化之高性能JAVA代码的若干个习惯的更多相关文章
- Java 性能优化手册 — 提高 Java 代码性能的各种技巧
转载: Java 性能优化手册 - 提高 Java 代码性能的各种技巧 Java 6,7,8 中的 String.intern - 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String ...
- 推荐:Java性能优化系列集锦
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...
- JVM——九大工具助你玩转Java性能优化
本文转载自 http://www.importnew.com/12324.html 本文由 ImportNew - 陈 晓舜 翻译自 idrsolutions.欢迎加入翻译小组.转载请参见文章末尾的要 ...
- JAVA性能优化的五种方式
一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层.它往往须要在软件开发之前进行.在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设 ...
- Java 性能优化之 String 篇
原文:http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/ Java 性能优化之 String 篇 String 方法用于文本分析 ...
- java 性能优化(代码优化)
参考博文: java 性能优化:35 个小细节,让你提升 java 代码的运行效率
- 《Java性能优化权威指南》
<Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...
- Java 性能优化的五大技巧
要对你的 Java 代码进行优化,需要理解 Java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的.使用下面这五个技巧和资源,开始学习如何分析和优化你的代码吧. 在我们开始之前, ...
- 【转】10种简单的Java性能优化
10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...
随机推荐
- GWT异步更改cellTable中cell的数据显示
项目中遇到一个棘手的问题,使用GWT的cellTable的时候,要更改一个单元格的显示问题.如果仅仅是一个单独的cell 可能会有比较好的处理办法,比如可以找到这一列,然后更新整个cellTable, ...
- Day1作业---登录接口及多级菜单
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Ma Qing data = { "山东" :{ "济南&qu ...
- Python:格式化操作符(%)
原文作者:田小计划 原文出处:http://www.cnblogs.com/wilber2013/ (若转载,请标明原文出处) 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整 ...
- spring之:XmlWebApplicationContext作为Spring Web应用的IoC容器,实例化和加载Bean的过程
它既是 DispatcherServlet 的 (WebApplicationContext)默认策略,又是 ContextLoaderListener 创建 root WebApplicationC ...
- BA 新web化 问题汇总
1. 3D堆栈图在winform端无法显示,但在web端可以正常显示,说明与浏览器版本有关,在 IE 中设置文档模式为 IE8 即报错,IE9 却正常显示,可在 <head>节点下添加如下 ...
- 一个hitbernate配置文件,带几个表(注意mapping);如果连接字符串没有设置utf-8,向insert mysql 会产生乱码(utf8 或 utf-8)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuratio ...
- dos 下bat 常用符号
1.@一般在它之后紧跟一条命令或一条语句,则此命令或语句本身在执行的时候不会显示在屏幕上.请把下面的代码保存为test.cmd文件,然后运行,比较一下两条echo语句在屏幕上的输出差异: ech ...
- C++——explicit
explicit构造函数是用来防止隐式转换的.请看下面的代码: class Test1 { public: Test1(int n) { num=n; }//普通构造函数 private: int n ...
- js 操作属性,操作内容,
disable=“disable” 让按钮变得不可选 先建一个按钮,让class = ’btn‘ 然后, 添加,修改属性 document.getElementsByClassName('btn')[ ...
- 面试题: java面试经历 已看1 抢红包如何分配每个人抢到的钱 有用 难点的面试题
2018.03.09 深圳乐唯科技 我看了下感觉这公司貌似挺不错的,面试官人也挺好的,氛围应该很不错,可惜我实力不足,唉,接续努力,下面把面试中印象较深的三个问题写一下. 面试问题1:数据库删除重复数 ...