网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java基础:java程序性能和速度优化实例     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:79次  录入:管理员--2007-11-16  
 

例一:应用具有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()一次性完成。


 
 
上一篇: 详细解读java语言灵巧指针与垃圾回收    下一篇: java技术:ajax+jsp无刷新验证码实例
  相关文档
java基础学习:functor的实现 11-16
使用技巧:java程序开发中如何应用线程 11-16
java内存泄露问题分析 11-16
在java中获取系统属性 11-17
java applet编程显示图像(1) 11-16
disksuite做raid 0的note 11-17
java nio api详解 11-17
用java得到excel中formula的值 11-17
java的封装类 11-17
介绍开发j2ee应用的几个要领 11-20
用java动态代理实现aop 11-17
必须执行清除 11-17
j2me编程开发平台中几个重要概念的说明 05-06
scjp考试心得之二 11-17
j2ee会话外观模式与值对象 11-17
jox(关于java处理xml文档的讨论) 11-17
用awt组件实现登录对话框 11-17
java入门教程:第一章 11-17
使用decorator模式实现日期选择组件(2) 11-17
java桌面应用程序设计:swt 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息