Java性能优化 Java性能优化

Java性能优化

  • 期刊名字:计算机应用
  • 文件大小:809kb
  • 论文作者:全锐,芦东昕,谢世波,方马
  • 作者单位:中兴通讯股份有限公司
  • 更新时间:2020-09-29
  • 下载次数:
论文简介

第23卷计算机应用.Vol.232003年12月Computer ApplicationsDec., 2003文章编号:1001 - 9081(2003)12Z - 0344- 02Java性能优化全锐,芦东昕,谢世波,方 马(中兴通讯股份有限公司成都研究所,四川成都610041)摘要:性能问题一直是Java无法回避的一一个弱点。然而造成性能低下的原因除了Java本身的实现外,很多时候是由于应用没有优化地使用Java造成的。从虚拟机、应用编程和测试三方面分析如何进行Java优化,指导进行高效的Java应用设计。关键词:Java;性能;优化中图分类号: TP311. 52文献标识码:A面向对象的编程模式和语言本身的优秀特征使Java成多介入内存管理,但是这种简单性也导致了不可控性,所以唯为众多应用开发的首选。任何事务都有两面性:简单、跨平-能够做到的就是通过调整Java内存参数进行-定的控制。台、垃圾收集等的确减少了程序员的许多工作;然而一个设计可以调整如下的参数:良好的Java程序,其性能表现往往不如-个完成同样功能的-Xms and -Xmx.控制虚拟机内存使用量;C或C++程序。这几乎成为Java最大的一个弱点。但是在-verbose: gc,观测GC运行的具体情况;Java程序中,大部分的性能问题并不在Java语言本身,而在-XX: NewSize,控制“幼稚园"(GC中的nursery概念)开于使用这种语言的方式和设计人员对性能问题的弱化,没有始大小;掌握优化使用Java语言的方法。-Xincgc and -Xnoincgc ,打开或者关闭增量式回收。注意:某些-X参数不是标准选项,可能在虛拟机将来的1 Java虛拟机的优化版本中改变。对于简单的小型程序,-般用“Java 主类”的方式来运行-Xms控制了虛拟器初始内存大小,-Xmx控制了虚拟机程序。但如果是大型程序,特别是服务器端程序,对各种资源最大内存大小。虛拟机开始的时候分配Xms内存给应用程消耗都比较大,这时就应该注意Java虚拟机的参数了,其对序使用,-旦内存的使用超过了Xms,则自动扩展内存,直到程序运行有着至关重要的影响。Xmx,如果这时还有新的内存需要,则要抛OutOfMemeory异1.1 Java虛拟机的选择常了。Xms的值并不是随便设定的,虽然其设定得很小没有Java虚拟机主要有Classic.HotSpot虛拟机,其中很大的影响,内存如果不足,最终都会扩展上去的,但是这种HotSpot虚拟机又分为Java HotSpot Client VM和Java扩展总会耗用一定的虚拟机资源。所以Xms最佳的设定是HotSpot Server VM。Classic 虚拟机是老的虚拟机,一般情比程序进入稳定状态后的内存使用值略大一点。HotSpot 虛况下不再使用。拟机的Xms默认为2M,Xmx默认为64M。对于-些大型的HotSpot虛拟机是Sun最新的Java虚拟机,其重点突破程序这远远不能满足。另外Xmx的设定之和(多个虚拟机了几个关键性的技术,从而获得了杰出的性能:1)“运行中适时)一般不能超过物理内存的80%,否则得不到很好的性能。配”编译;2)方法内置;3)改进和重新设计的对象布局;4)快速-verbose:gc详细观测GC是如何起作用的,帮助进行各且完全精确的垃圾回收;5)超快速线程同步。这些杰出的技种参数的设定。术突破使Java虚拟机的效率成倍提高。-XX:NewSize用来控制nursery 的开始大小。一般情况Java HotSpot Client VM是默认的HotSpot虚拟机,其下,即使现在的内存使用小于Xms,也会有一定的GC,因为.适用于-般的客户端程序和小型程序。JavaHotSpotServerHotSpot使用分代式GC。其基于一种合理的假设:大多数的.VM是Sun在企业服务器环境中提供的快速、可靠的Java虛对象都是刚生成不久就死亡了。所以它并不是收集所有的内.拟机。-般的大型服务器端应用应该选择这个虛拟机。存,而是将内存分成-些代,当最年轻的代(即“nursery")满1.2Java内存参数的调整了以后,就进行-次部分的GC来回收这些不再使用的对象。在机器配置和Java虛拟机版本-定的情况下,影响Java这种中国煤化工得多,也快得多,其大大降程序性能最大的就应该是Java内存参数配置了。低了YHCN MH C提高了虚拟机的吞吐量。GC(垃圾收集)无疑是Java的一大优点,程序员无须过在默认的情况下nursery为640K(Intel平台),这个值如果设.收稿日期:2003-10-16作者简介:全锐(1976-),男,四川成都人.硕土,主要研究方向:电信网络管理、电子政务J2EE;芦 东昕(1971-),男,黑龙江哈尔滨人,博士后,主要研究方向:电信网络管理、嵌入式系统、信息安全;谢世波(1973-),男 ,四川成都人,硕士,主要研究方向:电信网络管理、嵌入式系统;方马(1973-).男,四川成都人,硕士,主要研究方向:电信网络管理、嵌入式系统J2EE.12月全锐等:Java性能优化345定得太小,则对象在代间移动很频繁,让该被回收的对象阻塞同步代码段。-些集合类本身就是synchronized的,如果在在老的代中,导致完全GC更早发生;如果这个值设定得太单线程使用,则没有意义,请自己实现非synchronized 的版大.则可能导致分代收集较长的停顿,最后达到完全GC的时间。这个值只有通过-verbose:gc打开GC观察实际的结果,d)对于I/O,如果可能,尽量用缓冲,当然,如果flush很不断调整。不过,在长时间运行的Java程序中,HotSpot虛拟频繁,则用缓冲没有意义。机能够自动调整nursery大小,所以HotSpot是-种很优秀e)其它--些优化,如尽可能多地使用static,final,private的虛拟机。等关键字。-Xincgc打开增量式GC。它将完全的对象集分成小的对但是在大多数实际程序中,它们的优势有限。尽可能地象集,每次只进行部分的GC,缩短了GC的时间,减小了程序使用它们,但是不要把所有优化工作都集中于此类习惯用法。的停顿。但是其总的GC消耗反大于完全GC。它适用于对同时,要遵循一个原则:“过早的优化是-切麻烦的根源”。最程序响应时间要求较高的场合,如图形界面。注意,增量式.明智的做法是抑制过早优化的冲动,因为那样做可能遗漏多GC不是等内存满了再运行,而是-旦发现机会就进行。种有用的编程技术,造成代码更难理解和操控,并需更大的精总的来说,HotSpot虚拟机有一定自适应能力,但是调整力进行维护。HotSpot内存管理还是一件相当复杂的工作,需要进行各种3从测试的角度进行Java优化测试和模拟,找到一组最优的值。这里说的是性能测试,其主要目的是找出Java程序的性2Java程序的优化能瓶颈。通行的测试工具,如ProfileViewer. Jswat、Optimizeit等,可以帮助定位性能瓶颈及优化的方向。Java程序的优化-般分为如下几个层次:测试的时候,应该通过各种工具提供的指标,对系统各个1)良好的构架设计组成部分的内存耗用和CPU时间进行横向比较,特别是那些构架是应用的基础,如果构架设计得不合理,则会对后续关键性的代码段。通过分析找出性能瓶颈所在,集中用上面的优化造成很大的障碍。构架应该简单、清晰,同时又考虑到介绍的方法对它们进行优化,再进行测试,找出新的瓶颈所-定的可扩展性。--定要注意构架的设计不能过多考虑将来在,最终达到性能需求。这里,一个明确的性能需求是很重要可能会有的功能,这样只会使构架设计变得越来越复杂,最终的。导致低效的设计,即使后面再怎么优化也起不到实质的作用。在测试的时候要注意如下的-些原则:2)关键流程的算法设计1)测试代码不能对系统的性能有太大影响。算法改进这类高级优化技术具有很大潜力。在优化性能2)如对自己的程序进行了修改,并试图(至少在开发平关键型代码块时,先分析此代码的实现过程,尝试从不同的角台上)改善它的性能,那么在修改前后应分别测试一下代码的度处理该问题。这类优化的一个明显困难是难于一般化。每执行时间。个算法都特定于特殊应用程序领域,因此能够提供的通用指3)如果要进行纵向比较,则应尽量在完全-致的环境中导原则几乎没有。这取决于程序员是否有创造力以及对问题进行每-次测试,如机器的配置、负载、网络的状况和数据库.的把握程度。的情况要尽量一致,才具有可比性。3)性能改进技术4)如果可能,应设计一个不依赖任何用户输入的测试,最基本思路是用数据复杂度换取时间复杂度。比如对象避免用户的不同反应导致结果出现误差。高速缓存技术。在Java程序中,对象高速缓存特别有用,因性能测试是-项较为复杂的工作,它要求测试人员要有为它避免了巨大的对象创建和垃圾收集开销。又如软引用技-定经验,并选择合适的测试方法,而且有时还要对源码进行术,其将对象的缓冲区完全置于GC的管理之下;还有就是线一定的走读。核心源码的作者可以进行相应的性能测试,往程池、连接池等技术,其实质也是缓存一些重新生成会很耗时往收到事半功倍的效果。这样,设计的时候运用各种优化思想,实现的时候运用各种优化技术,严格的测试找出并解决系的资源。这些都能很好提高系统效率。统的性能瓶颈,最后在合理的虚拟机参数下运行,一定能够在4)Java语言级别的优化Java应用中取得性能的较大突破。这是Java语言级别的编程优化。比如:参考文献a)-般的,用StringBuffer代替String;尽可能使用静态[1] Eckel B. Java编程思想[M]. 北京:机械工业出版社,2002.变量;不要对已生成的对象做过多的改变;生成对象时,要分中国煤化工)[M].北京:清华大学出版配给它合理的空间和大小;避免生成不太使用或生命周期短HCNMHG的对象或变量;只在对象作用范围内进行初始化。[3] http://Java. sun. com/b)只用异常机制进行真正的异常处理,而不是进行流程[4] http:// www. jboss. org/控制;尽可能重用已经存在的异常,而不是new新的异常。5] http://www. csdn. net.c)线程的synchronized 尽量少用,用同步方法而不要用[6] http:// www. huihoo. com.

论文截图
下一条:Gprof优化初探
版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。