JAVA虚拟机性能提高.doc_第1页
JAVA虚拟机性能提高.doc_第2页
JAVA虚拟机性能提高.doc_第3页
JAVA虚拟机性能提高.doc_第4页
JAVA虚拟机性能提高.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java虚拟机的选项请注意: 除非特别声明,否则在一个选项中指定的bytes(字节)都是作为参数。您也可以分别通过k或者m这两个字母来指定千个字节或者兆个字节(大小写都可以)。例如,下面的几种形式都是表示字节数:4194301,4096k,4096K,4m,和4M。一般选项 -server 在Mac OS X中没有特别的服务器虚拟机(server VM)。在激活java的时候可以使用 -server 选项,但这并不是启动另外的虚拟机,它还是启动客户虚拟机(client VM),只是这个虚拟机针对服务器的使用环境进行了调优。这些调优包括: * 在共享档案的生成过程中使用不同的类列表,这个列表中不包括GUI类(见“Mac OS X的Java共享档案”部分)。 * 增加Java堆的尺寸。 * 增加Eden代的内存空间的尺寸。 * 打开线程的本地Eden垃圾收集器(garbage collection)。-X 显示一个非标准虚拟机选项的简要描述。 -Xbootclasspath:path 指定一个目录以及JAR和ZIP档案的列表,作为搜索启动类的范围。列表中各项之间的分隔符为冒号(:)。 -Xfuture 对类文件执行严格的格式检查。这个选项强制Java对是否遵守类文件规范做更加严格的检查,而缺省的检查只是基于Java 1.1.x的标准。您应该使用这个选项来对代码进行测试,以便确保这些代码在未来的Java版本中能够工作,这些未来的版本可能强制进行更为严格的类文件格式检查。 -Xprof 把运行程序详细的行为分析数据发送给标准输出。在产品级的代码中不能使用这个选项。 -Xrs 和-XX:+ReduceSignalUsage选项一样。 -XX:+ReduceSignalUsage 正常情况下,Java响应SIGHUP,SIGINT,和SIGTERM信号。如果指定了这个选项,则Java会忽略这些信号,您要根据具体的需要在本地代码中实现这些信号的处理函数,同时还要在System.exit()中实现相关的关闭例程。 -XX:ReservedCodeCacheSize=size in bytes 设置最大的代码缓存的大小,缺省情况下是32(32M)。 -XX:-PrintJavaStackAtFatalState 缺省情况下,当本地代码崩溃时,Java会产生回溯(backtraces)信息。如果您在Java的错误报告中看到了崩溃的信息,则可以把这个选项关闭。Mac OS X 专用选项 -Xdock:name=applicationName 设定应用程序在Dock和菜单条上显示的名称。如果这个选项没有被设定,则缺省情况下Mac OS X会显示主类的全名。您只需要对那些从命令行或者JAR文件中启动的程序设定这个选项,那些可以双击的应用程序包则从Info.plist文件中读取正确的显示名。 -XX:+UseFileLocking 这个选项用来激活Carbon文件的锁定功能,缺省情况下关闭。如果您的Java应用程序和一些文件相互作用,而这些文件同时又受到一些Carbon应用程序的影响,则您需要使用这个选项,它可以避免应用程序修改那些正在被别的程序访问的文件。堆的尺寸 -Xmssize in bytes 设定Java堆的初始尺寸,缺省尺寸是2097152 (2MB)。这个值必须是1024个字节(1KB)的倍数,且比它大。(-server选项把缺省尺寸增加到32M。) -Xmnsize in bytes 为Eden对象设定初始Java堆的大小,缺省值为640K。(-server选项把缺省尺寸增加到2M。) -Xmxsize in bytes 设定Java堆的最大尺寸,缺省值为64M,(-server选项把缺省尺寸增加到128M。) 最大的堆尺寸达到将近2GB(2048MB)。请注意:很多垃圾收集器的选项依赖于堆大小的设定。请在微调垃圾收集器使用内存空间的方式之前,确认是否已经正确设定了堆的尺寸。垃圾收集:内存的使用 -XX:MinHeapFreeRatio=percentage as a whole number 修改垃圾回收之后堆中可用内存的最小百分比,缺省值是40。如果垃圾回收后至少还有40%的堆内存没有被释放,则系统将增加堆的尺寸。 -XX:MaxHeapFreeRatio=percentage as a whole number 改变垃圾回收之后和堆内存缩小之前可用堆内存的最大百分比,缺省值为70。这意味着如果在垃圾回收之后还有大于70%的堆内存,则系统就会减少堆的尺寸。 -XX:NewSize=size in bytes 为已分配内存的对象中的Eden代设置缺省的内存尺寸。它的缺省值是640K。(-server选项把缺省尺寸增加到2M。) -XX:MaxNewSize=size in bytes 允许您改变初期对象空间的上限,新建对象所需的内存就是从这个空间中分配来的,这个选项的缺省值是640K。(-server选项把缺省尺寸增加到2M。) -XX:NewRatio=value 改变新旧空间的尺寸比例,这个比例的缺省值是8,意思是新空间的尺寸是旧空间的1/8。 -XX:SurvivorRatio=number 改变Eden对象空间和残存空间的尺寸比例,这个比例的缺省值是10,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。 -XX:TargetSurvivorRatio=percentage 设定您所期望的空间提取后被使用的残存空间的百分比,缺省值是50。 -XX:MaxPermSize=size in MB 长久代(permanent generation)的尺寸,缺省值为32(32MB)。垃圾收集: 一般设定 -Xincgc Mac OS X不支持这个选项,不支持这种训练式的垃圾收集器。 -Xnoclassgc 禁用类的垃圾收集。 -XX:+UseConcMarkSweepGC 激活标志和清除同时进行的垃圾收集活动,这个选项对多处理器的计算机有效。 -XX:+UseParallelGC 激活并行的垃圾收集活动,这个选项只对多处理器的计算机有效。 -XX:-DisableExplicitGC 忽略代码中对System.gc()的显式调用。虚拟机仍然按照正常的机制进行垃圾收集。这个选项禁止在代码中强制执行垃圾收集。 -XX:+PrintTenuringDistribution 打印初期代中已分配内存的对象占用内存时间的信息。编译 -Xint 只在解释(interperated)模式下运行虚拟机。如果使用这个选项,系统将不编译任何字节码。 -XX:CompileThreshold=value 在编译开始前改变方法调用(程序分支)的数目,缺省值是1000。 -XX:-InlineUnreachableCalls 缺省情况下,虚拟机对所有可能的代码进行方法内联处理(method inlining),以方便编译器进行优化。对这个选项进行设定会使较少的代码按照内联方法被编译。这样,那些正常情况下不会运行的代码,如例外处理,就不会被处理为内联代码,而只能在运行时进行解释。设定这个选项可能会大大降低性能。 -XX:+CITime 显示有多少时间花在编译过的代码上。 -XX:+PrintCompilation 在Java的方法被编译时,打印其的跟踪信息。Threading -XX:NewSizeThreadIncrease=size in KB 允许您指定每个活动线程会增加多少初期对象空间。这个选项在调节由于线程增加而增加的分配率时可能会有用。它的缺省值为16(16 kilobytes)。 -XX:ThreadStackSize=size in KB 改变线程栈的大小。缺省情况下,线程栈的大小就是操作系统所使用的栈的缺省大小。 -XX:+UseTLAB 激活线程本地的分配缓冲区。 使用这个缓冲区将使线程任务繁重的应用程序的内存分配更加具有可扩展性,大大提高内存分配的性能。这个选项在多处理器的计算机和Mac OS X Server上缺省打开。共享 -XX:+PrintSharedSpace 打开共享的冗长输出。 -XX:-UseSharedSpaces 关闭共享。 附上经典文章: JVM 性能调整的一些基本概念 By kevinwu on February 5, 2007 6:51 PM | No Comments | No TrackBacks 作者 徐永久 本文是我在工作中调整 Solaris 8 上的 WebLogic 6.0SP2 中遇到诸多问题后,查阅相关资料而产生的一些概念,罗列出来,或许对您有所帮助。这并不代表,笔者推荐您使用 WebLogic 和 Solaris 的组合,相反,笔者欢迎相关 Tomcat 性能调整方面的心得。笔者在 Sun Tech Day 上和 Bea 公司的相关人员讨论后,认为 Bea 对 Open Source 和 Free Software 缺乏必要的远见。另外,其中一些术语的翻译,是我自己的”创作“,我不知道别人是怎样翻译的。如果有不当的地方,希望指正。堆( Heap)是 Java 程序的对象生活的地方,包含活的对象,死的对象以及剩余内存。当对象不能被运行中的程序的指针所到达时,这些对象成为”垃圾“。JVM 的堆大小决定了 VM 花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。堆划分为两个区域:新生代和旧生代。新生代又分为:Eden 和两片生存空间(survivor spaces)。其中保证有一片空间在任何时间是空的,当垃圾收集发生时, Eden 中的活的对象复制到下一片生存空间,对象就在生存空间之间复制,直到到达最大门限值(老化),然后复制到旧生代。Eden 是新的对象分配的地方。很多对象分配以后很快成为垃圾,这些对象称为具有 infant mortality.对象生存的时间越长,需要的收集时间也越长,因此,收集变慢。你的应用建立和释放对象的速度决定了垃圾收集的频度。因此,在编程时,应注意使用对象的缓冲,而不是新建立对象。大多数对象在新生代就已经死去,因此你能有效的调整垃圾收集。如果你能安排大多数对象的生存期小于一个收集时间,那么,垃圾收集是十分高效的。错误的”代“配置会导致频繁的垃圾收集,影响系统性能。如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5 秒。一般说来,你应该使用物理内存的 80% 作为堆大小。在最大工作负荷的时候,监视 WebLogic 的性能。使用 -verbosegc 选项测量有多少时间和资源用于垃圾收集。打开垃圾收集的详细信息输出以及重定向:% java -ms64m -mx64m -verbosegc -classpath $CLASSPATH-Dweblogic.domain=mydomain -Dweblogic.Name=clusterServer1-Djava.security.policy=/bea/weblogic6x/lib/weblogic.policy-Dweblogic.management.server=01:7001 -Dweblogic.management.username=system-Dweblogic.management.password=systemPassword weblogic.Server logfile.txt在 Solaris 系统上,采用下面的命令:weblogic.Server server.out 2&1Java HotSpot VM 选项标准的选项在各种平台都已经有介绍:/j2se/1.3/docs/tooldocs/win32/java.html/j2se/1.3/docs/tooldocs/solaris/java.html/j2se/1.3/docs/tooldocs/linux/java.html以 -X 开头的选项都为非标准选项(并不能在所有的 VM 上实现),在后续的版本中可能会不通知而变更。由于 -XX 选项需要特别的系统权限,因此不建议随便使用。在 1.3.0 之前的版本, J2SDK 的 Solaris 版本带有一个虚拟机的实现叫做 Exact VM(EVM),从 1.3.0 开始这个虚拟机被 Java HotSpot VM 所取代。Java HotSpot VM 目前认识下面的 -X 选项:-Xincgc 使用训练 GC-Xnoincgc 不是用训练 GC(缺省)-XX:MaxHeapFreeRatio= 最大堆剩余百分比(缺省 70) -X:MinHeapFreeRation= 堆最小剩余百分比(缺省 40) -Xint 只作解析 (不作 JIT 编译) -XX:+UseBoundThreads 绑定用户级别的线程 (只针对 Solaris) -Xmn 设置年轻一代的大小( young generation )(只对 1.4)对象分配在 Eden,并且在这里死亡,当 Eden 满时,引起一个小的收集(minor collection),一些生存的对象被移动到旧生代,如果旧生代需要收集,则引起大收集(major collection ),这会比较缓慢。如果 GC 成为瓶颈,那么需要指定代的大小,检查 GC 的详细输出,研究 GC 参数对性能的影响。旧生代的收集采用 mark-compact 的方式,其中的一部分叫做”永久代“(permanent generation)很特别,他包括了 JVM 自身的所有反映数据(reflective data),例如类以及方法。暂停时间的含义是应用因为垃圾收集而显示出来的短暂停顿。吞吐量的含义是在一段比较长的时间内,没有用在垃圾收集的时间和总时间的百分比。减少暂停时间的办法可以采用小的年轻代和增量收集,但是这以牺牲吞吐率为代价。Footprint 是一批工作进程的集合,以页和缓冲行数计量,在物理内存有限或者有很多处理器的系统里,footprint 可代表伸缩性。Promptness 是对象死去的时间和内存变为可用时的时间差,在分布系统中(包括 RMI)需要考虑。很大的新生代能提高吞吐率,但是牺牲了 footprint 和 promptness。Solaris 的 footprint 可以采用 pmap 命令来查看。GC 325407K-83000K(776768K), 0.2300771 secsGC 325816K-83372K(776768K), 0.2454258 secsFull GC 267628K-83769K(776768K), 1.8479984 secs上面的三行是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论