`
scholers
  • 浏览: 619646 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

高性能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协议
分享到:
评论

相关推荐

    FRC_Java_Programming.pdf

    - `VictorSP`:类似的电机控制器,提供更高的性能和更精细的控制选项。 #### 传感器接口 - `AnalogInput`:用于读取模拟信号。 - `DigitalInput`:用于处理数字信号输入,如开关状态检测。 #### 控制器与输入设备 ...

    最新JAVA编程题全集(60题*含答案)

    分解质因数是将一个正整数表示为若干个质数的乘积。程序4中,通过循环不断寻找最小的质数k,如果n能被k整除,就继续分解n/k,否则更新k为k+1。这个过程持续到n变为1,表示质因数分解完毕。这里涉及到了质数判断、...

    Java开发手册(嵩山版).pdf

    手册也强调了编写高效、高质量代码的重要性,致力于为开发者提供一个高效工作的良好环境。 阿里巴巴集团技术团队所做的一切努力,包括发布Java开发规约IDE插件、集成代码规约扫描引擎、编写《码出高效》详解图书,...

    阿里巴巴Java开发手册.pdf

    因此,该手册详细划分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个章节,并根据内容特点细分为若干二级子目录。 手册中的规范按要求的强度分为强制、推荐、参考三大类。对规范...

    JacORB-2.2.3-源代码

    4. **API改进**:可能对用户接口进行了优化,使其更符合Java编程习惯,同时也可能增加了新的API功能。 ** IDL到Java的编译 ** JacORB 提供了一个集成的IDL(Interface Definition Language)编译器,将IDL接口定义...

    第五届蓝桥杯大赛个人赛(软件类)省赛真题.zip

    根据压缩包内的"题目"这个文件名,我们可以推测它可能包含了若干个独立的编程题目,每个题目可能包括问题描述、输入输出格式、示例以及可能的限制条件。这些题目可能涵盖数据结构、算法、逻辑推理等多个方面,旨在...

    dreamedit2.3.6

    总结起来,DreamEdit 2.3.6 是一款全面、高效的代码编辑工具,它以强大的功能集、人性化的界面和良好的性能表现,成为了开发者们不可或缺的助手。无论你是初学者还是资深开发者,都能在 DreamEdit 的世界里找到属于...

    DWR.xml配置文件说明书(含源码)

    举个例子来说:下面的java代码没有办法对List集合中的对象进行转换. public class Check { public void setLotteryResults(List nos) { ... } } Singatures配置允许我们对DWR要操作的对象类型进行配置.对于了解...

    软件工程(图书馆扫描案例)

    模块划分则将系统功能拆分为若干个独立的组件,便于开发和维护,如用户管理模块、图书管理模块、借阅管理模块等。 在编码实现阶段,开发者会根据设计文档编写代码,这可能涉及多种编程语言,如Java、Python或C#。...

    em-websocket-master

    这个项目很可能是一个基于EventMachine的Websocket服务器实现,EventMachine是一个C++编写的高性能异步事件库,常用于Ruby编程语言。 【描述】"em-websocket-master" 的描述没有给出具体信息,但根据命名习惯,可以...

    notepad2 4.1.24

    对于编程人员而言,代码高亮是提高工作效率的重要工具,Notepad2支持多种编程语言的语法高亮,包括但不限于C、C++、Java、Python、JavaScript等,使得代码更易于阅读和理解。此外,它还具备自动缩进、括号匹配等实用...

    pset-11

    【描述】"pset-11" 的描述没有给出具体的细节,但可以推测这是一组编程练习,包含若干个任务或者问题,要求学生使用Java语言来解决。这些任务可能涉及基础语法、面向对象编程、数据结构、算法分析等多个方面。完成...

    spring MVC要注意的地方

    以上就是Spring MVC使用中的一些重要注意事项,这些知识点将帮助你更好地理解和运用这个框架,从而构建高质量的Java Web应用。在实际开发过程中,结合良好的编程习惯和设计模式,可以大大提高代码质量和可维护性。

    图书管理系统.pdf

    系统设计应遵循模块化原则,将功能分解为若干模块,如图书管理模块、用户管理模块、借阅管理模块等,每个模块负责一部分功能,这样有利于代码的维护和扩展。界面设计应简洁直观,符合用户习惯,提供清晰的操作指南,...

    黑盒测试 方法 用例

    等价类划分**:将所有可能的输入数据分为若干个等价类,只需选择每个等价类的代表数据进行测试,以覆盖所有可能的情况。 **4. 边界值分析**:重点测试边界条件,因为程序在处理边界值时往往容易出错。 **5. 因果...

    三十种架构设计模式(下).pdf

    - **实现方式**:通常使用高性能Web服务器(如Nginx)处理静态资源,并结合第三方CDN服务进行内容分发。 - **CDN机制**:支持主动推送和被动拉取两种模式,前者适用于固定文件,后者则更适合频繁变动的静态资源。 ...

    软件测试样题

    负载测试是性能测试的一个组成部分,它通常被视为压力测试的基础。然而,压力测试侧重于测试系统在超出正常负载条件的情况下的响应,例如模拟大量用户或数据。因此,虽然负载测试确实为理解性能边界提供了基础,但它...

    Lab-7

    此外,良好的编程习惯,如使用注释、遵循编码规范和编写可读性强的代码,也是提升代码质量的关键。 其次,软件工程的原则可能贯穿整个实验。这包括需求分析、设计模式、版本控制(例如使用Git)和项目管理工具(如...

    网上村委会业务办理系统论文.doc

    - 性能测试:评估系统性能指标。 - **结果分析**:记录测试过程中发现的问题及其解决办法。 #### 结论与展望 - **研究成果**:总结了项目实施过程中的关键技术和创新点。 - **应用价值**:分析系统上线后的实际...

Global site tag (gtag.js) - Google Analytics