`
wiiln
  • 浏览: 151911 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java程序性能和速度优化实例

    博客分类:
  • J2SE
阅读更多
一:串运算处理
public class StringOperation{
  public static void main(String args[]){
    String sqlQuery     = null;
    String sqlCondition = " and conditionC = conditionD ";
    StringBuffer sb     = new StringBuffer();
    sb.append("select * from database table where 1=1 and ");
    sb.append(" conditionA = conditionB ");
    if (!sqlCondition.equals(null){
     sb.append(sqlCondition);
    }else{
     sb.append(" and conditionE = conditionF ");
    }
    sqlQuery = sb.toString();
    .......
   }
  }
   
  在上例中,使用StingBuffer class来完成数据库查询建立,避免使用String class的"+="操作,以减少JVM在内存中创建新的对象,占用资源,增加JVM回收资源负担。读者可以使用Java Proflier功能来具体比较使用不同的String操作,JVM需要完成多少资源回收和运行时间。因此在JVM中对String直接进行"+="是非常昂贵的运算。

二:在JSP页面中关闭无用的会话
对于那些无需跟踪会话状态的页面,关闭自动创建的会话可以节省一些资源。使用如下page指令:
<%@ page session="false"%>

三:不要两次初始化变量
Java通过调用独特的类构造器默认地初始化变量为一个已知的值。所有的对象被设置成null,integers (byte, short, int, long)被设置成0,float和double设置成0.0,Boolean变量设置成false。这对那些扩展自其它类的类尤其重要,这跟使用一个新的关键词创建一个对象时所有一连串的构造器被自动调用一样。

四:


1. 如何使用Exception
Exception降低性能。一个异常抛出首先需要创建一个新的对象。Throwable接口中的构造器调用名为fillInStackTrace()的本地方法。这个方法负责巡检栈的整个框架来收集跟踪信息。这样无论何时有异常抛出,它要求虚拟机装载调用栈,因为一个新的对象在中部被创建。
异常应当仅用于有错误发生时,而不要控制流。

3. 在任何可能的地方让类为Final
标记为final的类不能被扩展。在《核心Java API》中有大量这个技术的例子,诸如java.lang.String。将String类标记为final阻止了开发者创建他们自己实现的长度方法。
更深入点说,如果类是final的,所有类的方法也是final的。Java编译器可能会内联所有的方法(这依赖于编译器的实现)。在我的测试里,我已经看到性能平均增加了50%。
4. 在任何可能的地方使用局部变量
属于方法调用部分的自变量和声明为此调用一部分的临时变量存储在栈中,这比较快。诸如static,实例(instance)变量和新的对象创建在堆中,这比较慢。局部变量的更深入优化依赖于你正在使用的编译器或虚拟机。
5. 停止小聪明
很多开发人员在脑子中编写可复用和灵活的代码,而有时候在他们的程序中就产生额外的开销。曾经或者另外的时候他们编写了类似这样的代码:
public void doSomething(File file) {
FileInputStream fileIn = new FileInputStream(file);
// do something
他够灵活,但是同时他们也产生了更多的开销。这个主意背后做的事情是操纵一个InputStream,而不是一个文件,因此它应该重写如下:
public void doSomething(InputStream inputStream){
// do something
6. 乘法和除法
我有太多的东东适用于摩尔法则——它声明CPU功率每年成倍增长。"摩尔法则"表明每年由开发者所写的差劲的代码数量三倍增加,划去了摩尔法则的任何好处。
考虑下面的代码:
for (val = 0; val < 100000; val +=5) { shiftX = val * 8; myRaise = val * 2; }
如果我们狡猾的利用位移(bit),性能将会六倍增加。这是重写的代码:
for (val = 0; val < 100000; val += 5) { shiftX = val << 3; myRaise = val << 1; }
代替了乘以8,我们使用同等效果的左移3位。每一个移动相当于乘以2,变量myRaise对此做了证明。同样向右移位相当于除以2,当然这会使执行速度加快,但可能会使你的东东以后难于理解;所以这只是个建议
7. 用代码有效处理内存溢出
OutOfMemoryError是由于内存不够后普遍会遇到的问题,下面一段代码能有效判断内存溢出错误,并在内存溢出发生时有效回收内存
通过该方法可以联想到有效管理连接池溢出,道理等同。
import java.util.*;
public class DataServer
{
private Hashtable data = new Hashtable();
public Object get (String key)
{
Object obj = data.get (key);
if (obj == null)
{
System.out.print (key + “ ”);
try
{
// simulate getting lots of data
obj = new Double[1000000];
data.put (key, obj);
}
catch (OutOfMemoryError e)
{
System.out.print (“\No Memory! ”);
flushCache();
obj = get (key);// try again
}
}
return (obj);
}
public void flushCache()
{
System.out.println (“Clearing cache”);
data.clear();
}
public static void main (String[] args)
{
DataServer ds = new DataServer();
int count = 0;
while (true) // infinite loop for test
ds.get (“” + count++);
}
}
8. Lazy Loading (Lazy evaluation)在需要装入的时候才装入
static public long
factorial( int n ) throws IllegalArgumentException
{
IllegalArgumentException illegalArgumentException =
new IllegalArgumentException( "must be >= 0" );
if( n < 0 ) {
throw illegalArgumentException ;
} else if( ( n == 0 ) || ( n == 1 ) ) {
return( 1 );
} else (
return( n * factorial( n - 1 ) ) ;
}
优化后代码
static public long
factorial( int n ) throws IllegalArgumentException
{
if( n < 0 ) {
throw new IllegalArgumentException( "must be >= 0" );
} else if( ( n == 0 ) || ( n == 1 ) ) {
return( 1 );
} else (
return( n * factorial( n - 1 ) ) ;
}
9. 异常在需要抛出的地方抛出,try catch能整合就整合
try {
some.method1(); // Difficult for javac
} catch( method1Exception e ) { // and the JVM runtime
// Handle exception 1 // to optimize this
} // code
try {
some.method2();
} catch( method2Exception e ) {
// Handle exception 2
}
try {
some.method3();
} catch( method3Exception e ) {
// Handle exception 3
}
已下代码 更容易被编译器优化
try {
some.method1(); // Easier to optimize
some.method2();
some.method3();
} catch( method1Exception e ) {
// Handle exception 1
} catch( method2Exception e ) {
// Handle exception 2
} catch( method3Exception e ) {
// Handle exception 3
}
10. For循环的优化
Replace...
for( int i = 0; i < collection.size(); i++ ) {
...
}
with...
for( int i = 0, n = collection.size(); i < n; i++ ) {
...
}
11. 字符串操作优化
在对字符串实行+操作时,最好用一条语句
// Your source code looks like...
String str = "profit = revenue( " + revenue +
") - cost( " + cost + ")";

// 编译方法
String str = new StringBuffer( ).append( "profit = revenue( " ).
append( revenue ).append( ") - cost( " ).
append( cost ).append( ")" ).toString( );
在循环中对字符串操作时改用StringBuffer.append()方法
String sentence = "";
for( int i = 0; i < wordArray.length; i++ ) {
sentence += wordArray[ i ];
}
优化为
StringBuffer buffer = new StringBuffer( 500 );
for( int i = 0; i < wordArray.length; i++ ) {
buffer.append( wordArray[ i ] );
}
String sentence = buffer.toString( );
12. 对象重用(特别对于大对象来说)
public
class Point
{
public int x;
public int y;
public Point( )
{
this( 0, 0 );
}
}
优化为:
public class Component
{
private int x;
private int y;
public Point getPosition( )
{
Point rv = new Point( ); // Create a new Point
rv.x = x; // Update its state
rv.y = y;
return rv;
}
}
// Process an array of Component positions...
for( int i = 0; i < componentArray.length; i++ ) {
Point position = componentArray[i].getPosition( );
// Process position value...
// Note: A Point object is created for *each* iteration
// of the loop...
}
可再次优化,仅使用一个类对象:)
public
class Component
{
private int x;
private int y;
public Point getPosition( Point rv )
{
if( rv == null) rv = new Point( );
rv.x = x; // Update its state
rv.y = y;
return rv;
}
// Create a single point object and reuse it...
Point p = new Point( );
for( int i = 0; i < componentArray.length; i++ ) {
Point position = componentArray[i].getPosition( p );
// Process position value...
// Note: Only *one* Point object is ever created.
}
13. j2ee相关
a) 尽量不要将大对象放到HttpSession或其他须序列化的对象中,并注意及时清空Session
b) 使用预编译语句prepareStatement代替createStatement
c) 尽可能使用连接池





分享到:
评论

相关推荐

    《Java程序性能优化》(葛一鸣)PDF版本下载.txt

    ### Java程序性能优化的重要性和目标 在软件开发过程中,特别是在企业级应用中,程序的性能往往直接关系到用户体验的好坏乃至系统的稳定运行。因此,进行有效的性能优化是必不可少的。《Java程序性能优化》这本书...

    Java程序性能优化 让你的Java程序更快、更稳定pdf文档视频资源

    Java程序性能优化是每个开发人员都需要关注的重要领域,特别是在企业级应用中,高效稳定的Java程序能够带来显著的业务优势。本资源包含一个PDF文档和相关的视频教程,旨在帮助你提升Java程序的速度和稳定性。 首先...

    Java程序设计技巧与开发实例

    本资源“Java程序设计技巧与开发实例”深入探讨了Java编程中的关键技术和实用策略,旨在帮助开发者提升编程效率和代码质量。 首先,Java的设计原则包括“Write Once, Run Anywhere”(一次编写,到处运行),这得益...

    Java程序性能优化(23条).

    ### Java程序性能优化知识点 #### 一、避免在循环条件中使用...以上就是根据给定文件中标题、描述和部分内容总结出的五个Java程序性能优化的知识点。通过遵循这些优化策略,开发者可以有效地提高Java应用程序的性能。

    Java程序性能优化 让你的Java程序更快、更稳定

    Java程序性能优化是每个开发人员都需要关注的重要领域,它涵盖了多个方面,旨在提高代码执行效率,减少资源消耗,提升系统稳定性。在这个主题中,我们将深入探讨如何让你的Java程序更快、更稳定。 首先,理解JVM...

    3种JAVA程序设计性能优化

    本文将深入探讨三种常见的Java程序设计性能优化策略,以帮助开发者提高代码的执行速度和整体系统性能。 首先,我们要理解的是“垃圾收集器优化”。Java中的垃圾收集机制是自动内存管理的关键,但如果不妥善处理,它...

    java程序性能优化

    ### Java程序性能优化 在Java开发中,提升程序性能是一个重要的环节,良好的性能不仅可以提高用户体验,还能节省系统资源。本文将详细介绍几个常见的Java程序性能优化技巧,并通过具体示例进行说明。 #### 一、...

    java 程序性能优化-pdf +源码

    《Java程序性能优化》这本书是Java开发者们提升技能和理解代码效率的重要参考资料。它结合了理论与实践,不仅深入解析了Java性能优化的各种策略和技术,还提供了丰富的源代码实例,帮助读者更好地理解和应用这些知识...

    Java应用程序和java Web调用Matlab配置实例

    安全性和性能优化也是需要考虑的问题。由于Matlab的计算可能会消耗大量资源,因此需要合理设计调用策略,避免阻塞主线程或引发内存溢出。此外,如果涉及敏感数据,还需要确保数据在传输过程中的安全性。 在提供的...

    大话JAVA性能优化

    在《大话JAVA性能优化》的PDF文档中,你将找到这些方面的详细讨论和实例分析,它不仅涵盖了理论知识,还提供了实战技巧和工具使用,是Java开发者进行性能优化的宝贵参考资料。通过深入学习和实践,开发者可以提升...

    Java性能优化比较

    Java性能优化是提升Java应用程序效率的关键技术,涵盖了代码优化、内存管理、并发处理等多个方面。在Java开发过程中,了解并掌握这些优化技巧可以显著提高应用的响应速度和资源利用率。 首先,我们关注的是代码层面...

    java程序性能优化好文章

    根据提供的文件信息,本文将详细阐述Java程序性能优化的相关知识点。 一、循环条件中避免使用复杂表达式 在循环中,循环条件会被反复计算。如果循环条件复杂,会导致每次迭代都进行大量的计算,从而降低程序运行...

    浅谈Java程序的性能优化

    【Java程序性能优化】在Java程序开发中,性能优化是一个重要的环节,因为它直接影响到程序运行效率和用户体验。本文将从基础优化和GUI设计时的优化两个方面探讨如何提升Java程序的性能。 一、基础优化 1. **避免...

    java系统性能优化手册

    ### Java系统性能优化手册知识点详解 #### 一、前言 在Java系统开发过程中,为了提升系统的整体性能,开发者需要掌握一系列的优化技巧。本文档旨在通过总结《河南省人口与计划生育利益导向管理信息系统》的实际应用...

    java性能优化java性能优化

    Java性能优化是提升Java应用程序效率的关键技术,涵盖了内存管理、代码优化、I/O处理等多个方面。以下是一些关键的性能优化策略: 1. **对象创建与克隆**:使用`new`关键字创建对象时,会调用构造函数链,这可能...

    提高Java程序性能

    Java程序性能优化是一个重要的主题,尤其对于大型企业级应用,性能优化可以显著提升用户体验和系统效率。以下是一些关于如何提高Java程序性能的关键点: 1. **使用单例模式**:单例模式可以减少资源的创建和管理,...

    Java2游戏程序设计实例

    Java2游戏程序设计实例是关于使用Java编程语言开发游戏的一个专题,主要面向初学者和有一定基础的开发者,通过具体的实例来讲解游戏开发的过程和技术。在Java2(也称为Java SE 2)时代,Java已经成为了一个广泛应用...

    Java for循环性能优化实现解析

    Java for循环性能优化实现解析 Java for循环性能优化实现解析是 Java 编程中非常重要的一部分,主要讨论了Java for循环性能优化的实现解析。下面是从文件中提炼出的相关知识点: 1. 嵌套循环优化 在Java中,嵌套...

Global site tag (gtag.js) - Google Analytics