创建对象: 
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代码的若干个习惯的更多相关文章

  1. Java 性能优化手册 — 提高 Java 代码性能的各种技巧

    转载: Java 性能优化手册 - 提高 Java 代码性能的各种技巧 Java 6,7,8 中的 String.intern - 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String ...

  2. 推荐:Java性能优化系列集锦

    Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...

  3. JVM——九大工具助你玩转Java性能优化

    本文转载自 http://www.importnew.com/12324.html 本文由 ImportNew - 陈 晓舜 翻译自 idrsolutions.欢迎加入翻译小组.转载请参见文章末尾的要 ...

  4. JAVA性能优化的五种方式

    一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层.它往往须要在软件开发之前进行.在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设 ...

  5. Java 性能优化之 String 篇

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/ Java 性能优化之 String 篇 String 方法用于文本分析 ...

  6. java 性能优化(代码优化)

    参考博文: java 性能优化:35 个小细节,让你提升 java 代码的运行效率

  7. 《Java性能优化权威指南》

    <Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...

  8. Java 性能优化的五大技巧

    要对你的 Java 代码进行优化,需要理解 Java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的.使用下面这五个技巧和资源,开始学习如何分析和优化你的代码吧. 在我们开始之前, ...

  9. 【转】10种简单的Java性能优化

    10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...

随机推荐

  1. hihoCoder#1062(最近公共祖先一)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中,但这是为什么呢? “为什么呢 ...

  2. [转载]Linux驱动-SPI驱动 之二:SPI通用接口层

    通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了 ...

  3. 1 ignite核心特性

    1 Ignite是什么? Apache Ignite是一个以内存为中心的分布式数据库.缓存和处理平台,支持事务.分析以及流式负载,可以在PB级数据上享有内存级的性能. 2 Ignite是不是内存数据库 ...

  4. java selenium webdriver第二讲 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

  5. 问题:Oracle to_date;结果:oracle常用的时间格式转换

    oracle常用的时间格式转换 1:取得当前日期是本月的第几周 SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; T ...

  6. leetcode559

    class Solution { public: int maxDepth(Node* root) { ; if (root != NULL) { queue<Node> Q; Q.pus ...

  7. (转)newInstance()和new()

    在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态 ...

  8. SQL Server连接Oracle FAIL

    第一步 安装好oracle客户端Oracle 11.2.0.3 Client Win 64-bit,并配置好TNS信息 第二步,配置odbc信息 配置好odbc连接信息,sql server肯定不能直 ...

  9. android task stack

    http://www.android100.net/html/201402/22/5690.html

  10. bzoj 2653 middle(主席树)

    题面:https://vjudge.net/problem/HYSBZ-2653 博客:https://blog.csdn.net/litble/article/details/78984846 这个 ...