`
zljpp
  • 浏览: 259318 次
社区版块
存档分类
最新评论

新手学java(7)- java性能优化

阅读更多

学习了java 关于性能优化的一些方式,这里整理了下

 

1不用new关键词创建类的实例 

  用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。 

  在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现: 

 

Java代码   收藏代码
  1. public static Credit getNewCredit()   
  2. {  
  3.  return new Credit();  
  4. }   


  改进后的代码使用clone()方法,如下所示: 

Java代码   收藏代码
  1. private static Credit BaseCredit = new Credit();  
  2. public static Credit getNewCredit()   
  3. {  
  4.  return (Credit) BaseCredit.clone();  
  5. }   


  上面的思路对于数组处理同样很有用。 

  2 使用非阻塞I/O 

  版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。 

  JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。 

  3 慎用异常 

  异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。 

  异常只能用于错误处理,不应该用来控制程序流程。 

  4 不要重复初始化变量 

  默认情况下,调用类的构造函数时,Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。 

  5 尽量指定类的final修饰符 

  带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。 

  另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。 

  6 尽量使用局部变量 

  调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。 

  7 乘法和除法 

  考虑下面的代码: 

Java代码   收藏代码
  1. for (val = 0; val < 100000; val +=5)   
  2. {  
  3.  alterX = val * 8;   
  4.  myResult = val * 2;   
  5. }   


  用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码: 

Java代码   收藏代码
  1. for (val = 0; val < 100000; val += 5)   
  2. {  
  3.  alterX = val << 3;  
  4.  myResult = val << 1;  
  5. }   



  修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。 

分享到:
评论

相关推荐

    《新手学Java 7编程(第5版)》扫描版[PDF]

    Java 7在功能上进行了多方面的增强和改进,包括性能优化、新的API、安全性和工具集的增强等。对于初学者而言,学习Java 7是进入Java世界的良好起点。 ### 二、Java 7的新特性 #### 1. 垃圾回收器改进 Java 7中的...

    基于Java的源码-Javashop-eop Java开发框架.zip

    在实际应用中,Javashop-eop框架的性能优化也是一个重要的议题。通过合理配置线程池、使用连接池优化数据库访问、开启GZIP压缩减少网络传输等手段,可以显著提升应用的响应速度和用户体验。 总的来说,Javashop-eop...

    新手学习Java路线图

    - 学习Hibernate的缓存机制和性能优化策略。 - 掌握多表查询的技术。 3. **Spring** - 学习Spring框架的核心特性,如依赖注入(DI)和面向切面编程(AOP)。 - 掌握Spring的数据源管理。 - 学习Spring事务管理的...

    java-jdk1.7-jdk-7u80-windows-x64.zip

    安装Java JDK 1.7 on Windows x64的步骤非常简单,只需双击下载的“jdk-7u80-windows-x64.exe”文件,然后按照安装向导进行操作。安装过程中,记得选择合适的安装路径,并勾选“添加Java到系统环境变量”选项,以便...

    java入门之Java2-3-4

    Java 2引入了许多改进和新特性,如多线程支持的加强、垃圾回收机制的优化以及Java虚拟机(JVM)的性能提升。这一部分的学习将涵盖基本语法、类和对象的创建、封装、继承和多态等面向对象编程的基本概念。此外,你还...

    Java学习利器-JAVA解惑

    它可能包含了各种常见问题的解答,如语法错误、程序逻辑错误、性能优化、内存管理、多线程编程、异常处理等。这些问题往往阻碍了开发者的学习进度,而这本书籍或教程的目的就是提供清晰的解释和解决方案。 1. **...

    java源码包---java 源码 大量 实例

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一...

    java-8-openjdk-amd64

    7. **并发改进**:Java 8对并发库进行了优化,包括Fork/Join框架和Parallel Streams,使得并行计算更加高效。 安装Java 8 OpenJDK AMD64 在Linux上通常涉及以下步骤: 1. 更新包列表:`sudo apt-get update` 2. ...

    Java Diary - JDK自带的java数据库

    在使用Derby时,开发者需要注意的一些关键点包括:数据安全、备份与恢复策略、性能优化以及错误处理。例如,Derby允许设置不同的安全级别,可以通过用户名和密码进行身份验证。同时,定期备份数据库是非常重要的,...

    mysql-connector-java-3.1.14

    - **性能优化**:例如,设置合适的超时时间、启用或禁用自动提交、选择合适的连接参数等,都可以对性能产生影响。 总的来说,MySQL Connector/J 3.1.14是连接Java应用和MySQL数据库的重要工具,其源码和文档为...

    新手零基础学习java

    - 性能优化:随着JIT(Just-In-Time)编译器的发展,Java程序的执行效率得到了显著提高。 #### 2. 开发环境搭建 - **JDK安装**:JDK(Java Development Kit)是开发Java应用程序所必需的基本工具包。下载适合当前...

    java新手必备-java核心技术卷电子版

    9. **JVM与内存管理**:理解Java虚拟机(JVM)的工作原理以及垃圾收集对于优化程序性能至关重要。书中会介绍JVM的内存模型、类加载机制以及如何进行性能分析。 10. **Java SE与Java EE**:虽然《Java核心技术卷》...

    给java新手的一些建议-java知识点归纳(java基础部份).docx

    1. **JVM(Java虚拟机)**:Java程序在JVM上运行,理解其基本概念,如类加载机制、内存管理和垃圾回收,对优化程序性能有很大帮助。了解JVM的工作原理,包括线程 Dump分析、内存结构和类加载器系统,能帮助开发者...

    mysql-connector-java-5.1.47.zip

    10. **性能优化**:通过缓存元数据、使用批处理等手段,提高数据操作的效率。 使用这个驱动包,Java 开发者可以创建基于 MySQL 数据库的应用程序,例如 Web 应用、桌面应用、大数据处理工具等。只需按照 JDBC 的...

    java-新手项目-羊了羊资源包

    掌握这些数据结构和算法能够优化程序性能。 7. 测试与调试 项目开发过程中的测试和调试同样重要。资源包可能包含JUnit等测试框架的使用,以及如何使用IDE的调试工具来定位和修复错误。 8. 版本控制 使用版本控制...

    初学者的------Java记事本------初作

    例如,它可能实现了打开、保存、复制、粘贴、剪切、查找、替换等基本文本操作,但可能在用户体验、性能优化或者高级特性上还有待提升。开发者开放的态度也暗示了他们愿意接受社区的帮助,共同改进项目。 【标签】:...

    aws-java-sdk-1.1.1.jar.zip

    对于性能优化,AWS Java SDK 1.1.1包含了连接管理和池化功能,可以有效地复用HTTP连接,减少网络延迟。同时,SDK还支持配置HTTP超时和重试策略,以适应不同的网络环境和应用需求。 在部署方面,由于`aws-java-sdk-...

    javadb-10_5_3_0.zip_javadb_10_5_3_0.m

    这个版本可能包含了一些特定的改进和修复,比如性能优化、新的功能添加或是对旧版本问题的修正。具体的更新日志通常可以在官方文档或发布说明中找到。 6. **开发与社区支持**: 作为开源项目,JavaDB有一个活跃的...

    java性能优化方法

    Java性能优化是提升系统效率的关键环节,特别是在处理大量数据或者高并发场景时,优化显得尤为重要。本主题将围绕“Java性能优化方法”展开,重点讨论Java集合的排序、反射机制在Spring中的应用以及如何减少对象的...

Global site tag (gtag.js) - Google Analytics