优化JAVA性能的几种方法

添加较小的辅助性函数

在最初版本的Swing工具包中,创建过多的Point、Rectangle和Dimension对象会严重地影响程序的性能。尽管一次在一个Point或Rectangle对象中返回多个值似乎更有效率,但这样作的代价要比调用多个方法高得多。在最近的Swing版本推出之前,这个问题可以通过简单地在组件或其他类中添加一些辅助性的方法得到改善,如下所示:

public int getX() { return myBounds.x; }
public int getY() { return myBounds.y; }
public int getHeight() { return myBounds.height; }
public int getWidth() { return myBounds.width; }

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

int x = component.getX();
int y = component.getY();
int h = component.getHeight();
int w = component.getWidth();

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

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

可变性的利用

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

public Rectangle getBounds(Rectangle returnVal) {
returnVal.x = myBounds.x;
returnVal.y = myBounds.y;
returnVal.height = myBounds.height;
returnVal.width = myBounds.width;
return returnVal;
}

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

结合二家之长

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

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; }
}

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

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

时间: 2024-09-20 00:29:04

优化JAVA性能的几种方法的相关文章

实用技巧:PHP中调用Java类的两种方法

Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中的Java扩展模块,另一种是使用minij2ee应用服务器提供的SJOP协议实现.下面我们来比较一下这两种方法各自的特点. 1.php的Java模块 php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如: <?php$system=new Java("java.lang.System");print "Java ver

PHP调用java类的两种方法

Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中的Java扩展模块,另一种是使用minij2ee应用服务器提供的SJOP协议实现.下面我们来比较一下这两种方法各自的特点.1.php的Java模块php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如:<?php$system=new Java("java.lang.System");print "Java versio

java随机数的几种方法

java随机数的几种方法   方法1:    1 //利用固定数组长度n,通过n的变化来实现.  2  //关键:nums[r]=nums[n-1];  3  //        n--;  4 public class Test1  5 {  6     public static void main(String[] args){  7         int n=35;  8         int[] nums=new int[n];  9         for(int i=0;i<n

java解析xml二种方法

java解析xml二种方法 配置文件为: <?xml version="1.0" encoding="utf-8"?> <config>     <point name="test1">         <name>zhang3</name>         <address>abcdefg</address>         <email>a@b.c

网络营销中优化实时搜索的五种方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 自从去年GOOGLE推出实时搜索以来,实时搜索的这一概念已经被更多的人关注.今天,实时搜索是在为所有主要的搜索引擎列入首要任务 – GOOGLE,BING和YAHOO等.作为新技术的一部分,google同时也跟TWRITE等合作,把与关键词相关的新闻与博客内容放在搜索排名的首 页!对于网络搜索而言,实时搜索能够快速的让使用者了解相关的重要事件

Java云计算的两种方法

最近,人们在思考如何使用Java来实现云计算,我看到了两种趋势性的方法.它们存在交叉重叠处而并非互相排斥,但总体而言它们在项目方面有着非常不同的表现: 重面向UI(Heavy UI oriented) 这种类型的应用或框架通常提供基于UI的控制台.管理有用.插件等,这为管理云中的资源比如开始和停止图像等提供了唯一的方法.这种方法的关键特征是它需要大量用户的输入和人的干预,所以这变得相对不动态.不随需而变.最好的例子是:RightScale, GigaSpaces, ElasticGrid. 重面

java更新数据库几种方法总结

讲到了如何用java连接mysql数据库,并读取数据库里某字段的值,这次需要涉及的是更新数据库操作.对于入门级的学习者来说,最简单的方法有两种. 先来看下之前如何读取数据库的:  代码如下 复制代码 Statement st = con.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM user where name = '" + name + "'"); 是的,我们用的select语句

易被忽视优化网站设计的五种方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 每天有成千上万的网站被创造出来,这些新网站不是基于浏览者的需要 而是基 于网站所有者的需要.浏览者被 忽视,是大多数网站不成功的最大原因.这里将给出5种方法来优化您的设计. 1. 成为浏览者中的一员,把自己放在浏览者的地位. 浏览者到您的网站来,他想要什么?您的网站的目标不仅仅需要满足您的需求,更重要的是需要满足浏览者的需求.要得出浏览者想要

易被忽视的优化网站设计的五种方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 每天有成千上万的网站被创造出来,这些新网站不是基于浏览者的需要而是基于网站所有者的需要.浏览者被忽视,是大多数网站不成功的最大原因.这里将给出5种方法来优化您的设计. 1. 成为浏览者中的一员,把自己放在浏览者的地位. 浏览者到您的网站来,他想要什么?您的网站的目标不仅仅需要满足您的需求,更重要的是需要满足浏览者的需求.要得出浏览者想要 的,