java性能的优化(一)

  我对问题的理解:面试中的一个问题,居然想了半天没有什么头绪,我想还是没有思考,没有积累过。其实完全可以说上一些小细节,比如用StringBuffer代替String,用HashMap代替Hashtable, 乘法操作用位移,尽量复用已有的经过检验的高效代码等等。

    下面的文章转载自别的网站,写得很专业,周到,有深度。

Java性能的优化

    Java在九十年代中期出现以后,在赢得赞叹的同时,也引来了一些批评。赢得的赞叹主要是Java的跨平台的操作性,即所谓的”Write Once,Run Anywhere”.但由于Java的性能和运行效率同C相比,仍然有很大的差距,从而引来了很多的批评。

    对于服务器 端的应用程序,由于不大涉及到界面设计和程序的频繁重启,Java的性能问题看似不大明显,从而一些 Java的技术,如JSP,Servlet,EJB等在服务器 端编程方面得到了很大的应用,但实际上,Java的 性能问题在服务器端依然存在。下面我将分四个方面来讨论Java的性能和执行效率以及提高Java性能的一些方法。

    一.关于性能的基本知识

    1.性能的定义

    在我们讨论怎样提高Java的性能之前,我们需要明白“性能“的真正含义。我们一般定义如下五个方面作为评判性能的标准。

    1) 运算的性能----哪一个算法的执行性能最好

    2) 内存 的分配----程序需要分配多少内存,运行时的效率和性 能最高。

    3) 启动的时间----程序启动需要多少时间。

    4) 程序的可伸缩性-----程序在用户负载过重的情况下的表现。

    5) 性能的认识------用户怎样才能认识到程序的性能。

    对于不同的应用程序,对性能的要求也不同。例如,大部分的应用程序在启动时需要较长的时间,从而对启动时间的要求有所降低;服务器端的应用程序通常都分配 有较大的内存空间,所以对内存的要求也有所降低。但是,这并不是所这两方面的性能可以被忽略。其次,算法的性能对于那些把商务逻辑运用到事务性操作的应用 程序来讲非常重要。总的来讲,对应用程序的要求将决定对各个性能的优先级。

    2.怎样才能提高JAVA的性能

    提高JAVA的性能,一般考虑如下的四个主要方面:

    (1) 程序设计的方法和模式

    一个良好的设计能提高程序的性能,这一点不仅适用于JAVA,也适用也任何的编程语言。因为它充分利用了各种资源,如内存,CPU ,高速缓存,对象缓冲池及多线程,从而设计出高性能 和可伸缩性强的系统。

    当然,为了提高程序的性能而改变原来的设计是比较困难的,但是,程序性能的重要性常常要高于设计上带来的变化。因此,在编程开始之前就应该有一个好的设计 模型和方法。

    (2) JAVA布署的环境。

    JAVA布署的环境就是指用来解释和执行JAVA字节码的技术,一般有如下五种。即解释指令技术(Interpreter Technology),及时编译的技术(Just In Time Compilier Technology), 适应性优化技术(Adaptive Optimization Technology), 动态优化,提前编译为机器码的技术(Dynamic Optimization,Ahead Of Time Technology)和编译为机器码的技术(Translator Technology).

    这些技术一般都通过优化线程模型,调整堆和栈的大小来优化JAVA的性能。在考虑提高JAVA的性能时,首先要找到影响JAVA性能的瓶颈 (BottleNecks),在确认了设计的合理性后,应该调整JAVA布署的环境,通过改变一些参数来提高JAVA应用程序的性能。具体内容见第二节。

    (3) JAVA应用程序的实现

    当讨论应用程序的性能问题时,大多数的程序员都会考虑程序的代码,这当然是对的,当更重要的是要找到影响程序性能的瓶颈代码。为了找到这些瓶颈代码,我们 一般会使用一些辅助的工具,如Jprobe,Optimizit,Vtune以及一些分析的工具如TowerJ Performance等。这些辅助的工具能跟踪应用程序中执行每个函数或方法所消耗掉的时间,从而改善程序的性能。

    (4) 硬件和操作系统

    为了提高JAVA应用程序的性能,而采用跟快的CPU和更多的内存,并认为这是提高程序性能的唯一方法,但事实并非如此。实践经验和事实证明,只有遭到了 应用程序性能的瓶颈,从而采取适当得方法,如设计模式,布署的环境,操作系统的调整,才是最有效的。

    3.程序中通常的性能瓶颈。

    所有的应用程序都存在性能瓶颈,为了提高应用程序的性能,就要尽可能的减少程序的瓶颈。以下是在JAVA程序中经常存在的性能瓶颈。

    

    了解了这些瓶颈后,就可以有针对性的减少这些瓶颈,从而提高JAVA应用程序的性能

 

    4. 提高JAVA程序性能的步骤

    为了提高JAVA程序的性能,需要遵循如下的六个步骤。

    a) 明确对性能的具体要求

    在实施一个项目之前,必须要明确该项目对于程序性能的具体要求,如:这个应用程序要支持5000个并发的用户,并且响应时间要在5秒钟之内。但同时也要明 白对于性能的要求不应该同对程序的其他要求冲突。

    b) 了解当前程序的性能

    你应该了解你的应用程序的性能同项目所要求性能之间的差距。通常的指标是单位时间内的处理数和响应时间,有时还会比较CPU内存 的利用率。

    c) 找到程序的性能瓶颈

    为了发现程序中的性能瓶颈,通常会使用一些分析工具,如:TowerJ Application Performance Analyzer或VTune来察看和分析程序堆栈中各个元素的消耗时间,从而正确的找到并改正引起性能降低的瓶颈代码,从而提高程序的性能。这些工具还 能发现诸如过多的异常处理,垃圾回收等潜在的问题。

    d) 采取适当的措施来提高性能

    找到了引起程序性能降低的瓶颈代码后,我们就可以用前面介绍过的提高性能的四个方面,即设计模式,JAVA代码的实现,布署JAVA的环境和操作系统 来提高应用程序的性能。具体内容将在下面的内容 中作详细说明。

    e) 只进行某一方面的修改来提高性能

    一次只改变可能引起性能降低的某一方面,然后观察程序的性能是否有所提高,而不应该一次改变多个方面,因为这样你将不知道到底哪个方面的改变提高了程序的 性能,哪个方面没有,即不能知道程序瓶颈在哪。

    f) 返回到步骤c,继续作类似的工作,一直达到要求的性能为止。

    二. JAVA布署的环境和编译技术

   开发JAVA应用程序时,首先把JAVA的源程序编译为与平台无关的字节码。这些字节码就可以被各种基于JVM的技术所执行。这些技术主要分为两个大类。 即基于解释的技术和基于提前编译为本地码的技术。其示意图如下:

      

    具体可分为如下的五类:  

    a) 解释指令技术

    其结构图和执行过程如下:

      

    JAVA的编译器首先把JAVA源文件编译为字节码。这些字节码对于JAVA虚拟机(JVM)来讲就是机器的指令码。然后,JAVA的解释器不断的循环取 出字节码进行解释并执行。

   这样做的优点是可以实现JAVA语言的跨平台,同时生成的字节码也比较紧凑。JAVA的一些优点,如安全 性,动态性都得保持;但缺点是省生成的字节码没有经过什么优化,同全部编译好的本地码相比,速度比较慢。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值