程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java程序性能和速度優化實例

Java程序性能和速度優化實例

編輯:關於JAVA

例一:應用具有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需要完成多少資源回收和運行時間。因此在JVM中對String直接進行"+="是非常昂貴的運算。

  例三:處理昂貴的數據庫初始化

  目前許多網站可以透過Web服務器查詢數據庫,如何提高數據庫查詢速度成為許多程序員關注的問題。在Java Servlets或JSP中可以通過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()中完成,以減少不必要的重復性數據庫運算。讀者可以根據應用的具體情況,甚至將數據庫的Statement和ResultSet部分移至init()中完成,或者調用 PreparedStatement與CallableStatement來優化數據庫的運算。同時,對數據庫的連接的關閉由destroy()一次性完成。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved