`

优化JAVA性能的几种方法

阅读更多

添加较小的辅助性函数

  在最初版本的Swing工具包中,<iframe align=right marginWidth=0 marginHeight=0 src="http://www.chinabyte.com/tag/cont_flash_software.html" frameBorder=0 width=360 scrolling=no height=300></iframe> 创建过多的Point、Rectangle和Dimension对象会严重地影响程序的性能。尽管一次在一个Point或Rectangle对象中返回多个值似乎更有效率,但这样作的代价要比调用多个方法高得多。在最近的Swing版本推出之前,这个问题可以通过简单地在组件或其他类中添加一些辅助性的方法得到改善,如下所示:

<table cellSpacing=0 cellPadding=0 width=600 bgColor=#ffffff border=0> <tr> <td>  public int getX() { return myBounds.x; }
  public int getY() { return myBounds.y; }
  public int getHeight() { return myBounds.height; }
  public int getWidth() { return myBounds.width; } </td></tr></table>

  现在,调用程序可以在不创建临时对象的情况下得到同样的结果,如下所示:

<table cellSpacing=0 cellPadding=0 width=600 bgColor=#ffffff border=0> <tr> <td>  int x = component.getX();
  int y = component.getY();
  int h = component.getHeight();
  int w = component.getWidth(); </td></tr></table>

  原来的getBounds()仍然可以使用,较小的辅助性函数只不过提供了一种实现同样目标的效率更高的方法,其结果是,Rectangle的接口将完全暴露在组件的接口中。当修改Swing使之支持并可以使用这些较小的辅助性函数后,其结果是,Swing中的许多操作的运行速度都比原来快了二倍。由于GUI代码对性能比较敏感,这一改进的意义是重大的。

  这种技术带来的负作用是对象拥有的方法更多了,而且要获取同一种信息可以有多种方法,这就使文件变得相当大而且也更加复杂了,不利于用户采用这一技术。但是,象Swing的例子显示的那样,在对性能要求比较高的情况下,这种优化技术还是十分有效的。

  可变性的利用

  除了在组件中添加象上面讨论的getX()等具有简单数据类型值的临时函数外,Java 2还使用了其他的技术来减少在AWT和Swing中的对象创建活动。在组件和其他的GUI类中添加另一种版本的getBounds(),就可以在没有创建临时对象的前提上使调用程序得到象Rectangle类型的返回值:

<table cellSpacing=0 cellPadding=0 width=600 bgColor=#ffffff border=0> <tr> <td>

  public Rectangle getBounds(Rectangle returnVal) {

   returnVal.x = myBounds.x;

   returnVal.y = myBounds.y;

   returnVal.height = myBounds.height;

   returnVal.width = myBounds.width;

   return returnVal;

  }

</td></tr></table>

  调用程序仍然必须创建一个Rectangle对象,不过,可以在以后的调用中重用它。如果一个调用程序反复调用许多Component对象,就可以创建一个Rectangle对象并在每个Component中使用它。需要注意的是,这一技术只适用于可变的对象类型,不可能通过这种方式减少创建String类对象。

  结合二家之长

  一个更好的解决Point等简单类的对象创建问题的方法是使得Point类成为不可变的,然后再定义一个可变的子类,具体方法如下面的例子所示:

<table cellSpacing=0 cellPadding=0 width=600 bgColor=#ffffff border=0> <tr> <td>

  public class Point {

   protected int x, y;

   public Point(int x, int y) { this.x = x; this.y = y; }

   public final int getX() { return x; }

   public final int getY() { return y; }

  }

  public class MutablePoint extends Point {

   public final void setX(int x) { this.x = x; }

   public final void setY(int y) { this.y = y; }

  }

  public class Shape {

   private MutablePoint myLocation;

   public Shape(int x, int y) { myLocation = new MutablePoint(x, y); }

 


   public Point getLocation() { return (Point) myLocation; }

  }

</td></tr></table>

  在上面的例子中,Shape可以安全地返回myLocation的地址,因为调用程序如果试图修改这些域或调用他们的"调节器"就会返回一个出错信息。当然,调用程序仍然可以将Point转换为MutablePoint,但很明显这会带来不安全性,虽然调用程序也会得到它们所需要的返回值。)C++的开发人员会注意到,这一技术与C++中的返回一个Rectangle的常量地址(const Rectangle&)有点类似━━Java不具备这样的特性。

  在Java 1.3类库中的java.math.BigInteger类中,一个类无需创建新的对象就返回一个"只读的"对象。MutableBigInteger类不是公开的,它只供java.math类库内部使用。但由于BigInteger类中的一些方法(例如gcd())是由许多的算术操作组成的,完成这些操作而无需创建临时对象将极大地改善程序的性能。

分享到:
评论

相关推荐

    10种java性能优化方案.docx

    本文将详细介绍10种Java性能优化策略,并重点解析文档中提到的几个关键点。 #### 二、hashCode() 方法优化 1. **背景**:`hashCode()` 方法在Java中用于快速查找对象。当对象存储在哈希表中时,例如`HashMap`,其...

    oracle连接java的几种方法

    本篇文章将详细介绍在Java中连接Oracle数据库的几种常见方法,以及相关的源码示例。 1. JDBC-ODBC桥连接: JDBC-ODBC桥是Java早期连接数据库的一种方式,它依赖于操作系统上的ODBC数据源。首先,你需要在系统中...

    Java 项目性能优化

    以下是几种常见的优化手段: 1. **直接使用JDBC API**:绕过Hibernate等ORM框架,直接使用JDBC API进行数据操作,可以减少中间层开销,提高性能。 2. **使用存储过程**:虽然降低了代码的移植性,但存储过程可以在...

    java调用本地dll的几种方法性能对比测试

    java调用本地dll的几种方法性能对比测试。 JNA消耗的总时间(ms):5406 bridj消耗的总时间(ms):984 JNI消耗的总时间(ms):47 包含c++源码和java源码,部署和使用方法。在win7和winxp下测试用过。 部分源码是...

    java性能分析文档

    Java性能分析是优化Java应用程序的关键步骤,它涉及监控和理解应用程序在运行时的资源消耗,如CPU使用率、内存分配、线程活动等。Performance Analyzer是一款专门针对Java性能的工具,它提供了深入洞察应用程序性能...

    Java性能优化

    ### Java性能优化关键知识点 #### 一、合理运用单例模式 **单例模式**是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java性能优化中,合理使用单例模式可以带来以下优势: 1. **...

    JAVA性能测试与调优案例

    通过实例分析了JVM内存泄漏的几种情况,并展示了如何使用JProfile等工具来跟踪内存泄漏问题。 ### 性能测试与调优案例分析 文档中提供了一个性能测试案例,对比了采用client和server版本JVM的Tomcat 5.5.28服务器在...

    将JAVA编译为EXE的几种方法

    ### 将JAVA编译为EXE的几种方法 在IT领域中,将Java程序转换为Windows可执行文件(.exe)的需求十分常见。这不仅提高了应用程序的可用性,还简化了部署过程,使得非技术人员也能轻松运行Java应用。本文将详细介绍几...

    JAVA线程安全及性能的优化.doc

    ### JAVA线程安全及性能优化的关键知识点 #### 一、JAVA内存模型与线程安全的基础概念 **JAVA内存模型**是理解线程安全的核心。不同的操作系统平台可能有不同的内存管理方式,但Java虚拟机(JVM)提供了一套统一的...

    Java性能调优命令

    以下是一些常用的Java性能调优命令及其用法和相关知识点。 1. jps命令用于列出所有的JVM实例。通过该命令,开发者可以快速查看本机上所有Java应用程序的进程ID。例如,使用`jps`可以列出本机所有的JVM实例。 2. ...

    java程序性能优化

    以上介绍了几种常见的Java程序性能优化技巧,包括避免在循环条件中使用复杂表达式、合理设置集合类的初始大小、在`finally`块中关闭资源、使用`System.arraycopy()`代替循环复制数组以及将简单的getter/setter方法...

    JAVA性能测试工具

    以下是对几种主要JAVA性能测试工具的详细介绍: ### LoadRunner LoadRunner是一款全面的性能测试解决方案,支持多种协议,包括HTTP、HTTPS、FTP、SMTP等,并且对某些协议的支持版本较高。它提供了高度灵活的负载...

    基于Soot的JAVA字节码优化及性能分析.pdf

    Java性能优化存在以下几点挑战: 1. 应用程序的设计和编码:应用程序的设计和编码对性能的影响非常大。 2. 虚拟机执行字节码的速度:虚拟机的执行速度对性能的影响也非常大。 3. 运行库的运行速度:运行库的运行...

    Java IO 性能优化

    为了提高序列化性能,可以采取以下几种策略: 1. **使用自定义序列化逻辑**:通过实现`Serializable`接口的子接口`Externalizable`,可以控制对象的序列化和反序列化过程。这样可以在序列化过程中省略不必要的字段...

    Java代码循环的优化

    ### Java代码循环的优化 在Java编程中,循环是...通过以上几种方法,可以有效地优化Java中的循环结构,从而提升程序的整体性能。在实际开发过程中,开发者应该根据具体情况灵活运用这些技巧,以达到最佳的性能效果。

    实战Java虚拟机——JVM故障诊断与性能优化.pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发中的关键环节——Java虚拟机(JVM)的专著。本书聚焦于实际应用中的问题解决和性能调优,对于Java开发者和系统管理员来说,是提升技术水平的重要...

    Java操作XML几种方法.pdf

    Java操作XML主要涉及三种方法:DOM、SAX和JDOM。每种方法都有其特点和适用场景,下面将详细讲解这三种方法以及它们在处理XML时的工作原理。 1. DOM(Document Object Model)解析: DOM是一种基于树形结构的XML...

    网站性能优化 Web开发 JSP java

    ### 网站性能优化——Web开发中的JSP与Java技术应用 在现代Web开发领域,网站性能优化是一项至关重要的工作。本篇文章将基于提供的文件信息,深入探讨几个关键的技术点,包括页面静态化、缓存技术、数据源管理、SSI...

Global site tag (gtag.js) - Google Analytics