当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

优化JAVA性能的几种办法[Java编程]

赞助商链接



  本文“优化JAVA性能的几种办法[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())是由很多的算术操作构成的,完成这些操作而无需成立暂时对象将极大地改进程序的性能.


  以上是“优化JAVA性能的几种办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 若何优化JAVA程序筹划和编码,提高JAVA性能
  • 优化Java Applet的加载历程
  • 优化JAVA性能的几种办法
  • 用stack变量优化Java代码
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .