<% if session("name")<>"" then response.write("当前用户:"&session("name")) response.write("  注销") response.write("  修改资料") else if request.cookies("name")<>"" then response.write("当前用户:"&request.cookies("name")) response.write("  注销") response.write("  修改资料") end if end if %>
首页 > 经验与观点>技术领域>Java >提高J2SE性能的代码技巧(下)

Java性能管理

 
  • 提高Java性能的几个高效用法
  • 提高J2SE性能的代码技巧(上)
  • 提高J2SE性能的代码技巧(下)
  • J2EE性能问题的分析
  • J2EE性能问题的诊断
  • J2EE性能问题的诊断示例
  • 诊断应用数据库的性能瓶颈
  • 在生产中监测和优化J2EE应用性能
  • 在生产中测量J2EE应用性能
  • J2EE性能问题的症状和优化
  • 构造高性能J2EE应用10个技巧
  • 构造高性能J2EE应用的5个策略
  • Bea WebLogic Portal的性能监测和诊断
  • PORTAL的性能挑战
  • 改善J2EE性能和用户体验的管理变革
  • 管理J2EE的世界(上)
  • 管理J2EE的世界(下)
  • 推荐产品的使用

     
  • PerformaSure J2EE性能诊断
  • PerformaSure J2EE健康检查示例
  • Spotlight实时诊断WebSphere Server实践
  • Spotlight实时诊断WebLogic Server实践
  • JProbe实践之"性能瓶颈"
  • JProbe实践之"短期对象循环"
  • JProbe实践之"内存泄露"
  • JProbe实践之"代码覆盖"
  • Quest Jprobe最佳实践(上)
  • Quest Jprobe最佳实践(下)
  • Foglight-APM与SLA的有力武器




  •  提高J2SE性能的代码技巧(下)


            www.InnovateDigital.com 整理

    1.格式化


          ■ 文本格式化类:

             一 java.text.DateFaormat

             一 java.text.NumberFaormat

             一 java.text.MessageFaormat

               可能非常慢

          ■ 例如:第一次调用DateFormat.geInstance()创建超过12000个对象

          ■ 每次调用DateFormat.format创建13个对象,加上第一次调用时的那次

             一 重用同一个DateFormat实例而不是重复调用DateFormat.getInstance是很值得做的

          ■ 其它的格式化类有相似的特点

    2.XML处理:SAX


          ■ 处理XML文档的低级,事件驱动库

          ■ 最好的选择,如果:

             一 你需要以线性的方式遍历整个文档

             一 你只需要查看几项

             一 内存效率是一个问题

    3.XML处理


          ■ 试着在你的应用程序里消除处理特定XML对象

          ■ 通过一个RMI调用传递DOM树,结果会使整个java对象树序列化。。。通常会4倍甚至更多的空间

    4.Buffered I/O


          ■ I/O类默认不缓冲

          ■ 为你的I/O流使用缓冲的包装器

               BufferedOutputStream

               BufferedInputStream

               BufferedReader

               BufferedWriter

          ■ 尝试在构造方法中使用缓冲大小参数

             一 BufferedInputStream:默认2048个字节(JDK1.4.1)

             一 BufferedReader:默认8192个字符(JDK1.4.1)

    5.流与Readers


          ■ 在java里有两个并行的I/O接口

            Reader和Writer

               一 BufferedInputStream:字符序列(16-bit)

            InputStream和OutputStream

               一 字节序列(8-bit)

          ■ 处理基于文本的文件,Readers&Writers更快

            更快的幅度达50%

            参考O'Reilly的"java Performance Tuning"第八章

    6.新I/O


          ■ 在JDK1.4或更高版本,java.nio包给出了更多I/O选项

             一 正则表达式匹配

             一 内存映射缓存

             一 非中断I/O

          ■ 这些能提供更高的I/O性能


    7.序列化


          ■ 使一个对象"变平"允许使它流化成一个文件(为了存储)或者网络连接(为了传输)

             一 添加Serializeable接口标记你的类

             一 通过ObjectInputStream/ObjectOutputStream

          ■ 序列化被远程方法调用广泛使用

          ■ 序列化可能会非常昂贵

             一 当你序列化一个对象时,这个对象可达的每个对象都会被序列化,可能会有非常多的对象

             一 除了内部虚拟机程序,还会大量使用反射

             一 序列化是非常繁冗的

                 只有一个int数据的类占用37个字节

                 序列化的对象包括了每个类成员及其值的全限定名

             一 速度是不对称的,反序列化比序列化速度更慢

    8.序列化:transient关键字


          ■ 可以重新定义序列化动作

             一 使用transient关键字指出不需要在序列化流中包含的成员变量

                 Private transient String name;

             一 这让你可以指出对象里不重要的成员变量或者当对象读入内存时可以重新计算的成员变量

    9.序列化:Externalizable接口


          ■ 消除序列化负载,实现Externalizable接口而不是Serializable

                Public void readExternal(ObjectInput out)

                 Public void writerExternal(ObjectOutput out)

          ■ 程序员完全要负责:

             一 管理序列化内容

             一 调用readExternal()/wirteExternal()方法序列化对象

    10.Externalizable


    Java performance

    (北京铸锐数码科技有限公司 www.InnovateDigital.com)


     
    北京铸锐数码科技有限公司 版权所有 © 2008
    中国·北京市海淀区大钟寺13号华杰大厦8A9-2室
    邮编 100098 电话 010-62139280 传真 010-62135268    京ICP备05019494