现在的位置: 首页 > 综合 > 正文

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

2013年10月11日 ⁄ 综合 ⁄ 共 2945字 ⁄ 字号 评论关闭

 

例一:用具有I/O Buffer功能Class
  import java.io.*;
  public class IoTest
  {
   public static void main(String args[])
   {
    try
    {
     FileReader fr = new FileReader(args[0]);
     BufferedReader br = new BufferedReader(fr);
     while ( br.readLine() != null )
     {
      System.out.println(" The file content are :" + br.readLine());
     }
     fis.close();
    }
    catch ( IOException ioe )
    {
     System.out.println("The I/O exception is " + ioe);
    }
   }
  }
   
  在上例中,程序使用了具有Buffer功能的Class,使得Disk I/O取速度大大提高。BufferedReader 是取代DataInputStream 而提高写速度的Java Class。在新的Java版本中,已不建使用DataInputStream,因写是基于字符为单位的。
   
  例二:字符串运算
   
  public class StringOperation
  {
   public static void main(String args[])
   {
    String sqlQuery = null;
    String sqlCondition = " conditionC = conditionD ");
    StringBuffer sb = new StringBuffer();
    sb.append("select * from database table where ");
    sb.append(" conditionA = conditionB and ");
    if ( ! sqlCondition.equals(null)
    {
     sb.append(sqlCondition);
    }
    else
    {
     sb.append(" conditionE = conditionF ");
    }
    sqlQuery = sb.toString();
    // Then connect to the database then excute the database query
    // .......
   }
  }
   
  在上例中,使用StingBuffer class来完成数据库查询建立,避免使用String class"+="操作,以减少JVM在内存中建新的象,占用源,增加JVM回收担。者可以使用Java Proflier功能来具体比使用不同的String操作,JVM需要完成多少源回收和运行时间。因此在JVMString直接"+="是非常昂的运算。

  例三:理昂的数据初始化

  目前多网站可以透Web查询数据,如何提高数据库查询速度成为许多程序员关注的问题。在Java ServletsJSP中可以通init() Jspinit()实现,以下是一具体Java Servlet与数据库对话实例。
    
  import java.io.*;
  import java.sql.*;
  import javax.servlet.*;
  import javax.servlet.http.*;
   
  public class DatabaseServlet extends HttpServlet
  {
   public void init( ServletConfig conf) throws ServletException
   {
    super.init(conf);
    Connection conn = null;
    try
    {
     Class.forName("sun.jdbc.odbc.JdcOdbcDriver");
     Conn = DriverManager.getConnection("jdbc:odbc:yourDSN,"","");
    }
    catch ( SQLException sqle )
    {
     System.err.println("your error exception is " + sqle);
    }
    catch ( ClassNotFoundException cnfe )
    {
     System.err.println("your error exception is " + cnfe);
    }
   }
   public void doGet( HttpServletRequest req, HttpServletResponse res) throws
   ServletException, IOException
   {
    res.setContentType("text/html");
    ServletOutputStream out = null;
    // Your HTML formatter
    out.println(" Your HTML");
    try
    {
     Statement stmt = conn.creatStatement();
     ResultSet rs = stmt.excuteQuery("select * from yourDatabasetable ");
     while ( rs.next() )
     {
      // Processing your data
     }
    }
    catch ( SQLException sqle )
    {
     out.println("The SQL error is " + sqle);
    }
    // output your processing result to HTML page
    out.println(" your HTML");
    rs.close();
    stmt.close();
   }
   public void destroy()
   {
    try
    {
     conn.close();
    }
    catch ( SQLException sqle )
    {
     System.err.println("your SQL error is " + sqle);
    }
   }
  }
   
  在上例中,由于Java Servlet运行机制的特点,将昂的数据初始化运算在整个Servlet运行中用一次的init()中完成,以减少不必要的重性数据运算。者可以根据用的具体情况,甚至将数据StatementResultSet部分移至init()中完成,或者PreparedStatementCallableStatement化数据的运算。同数据接的关闭destroy()一次性完成

抱歉!评论已关闭.