Java虚拟机的选项请注意:除非特别声明,否则在一个选项中指定的bytes(字节)都是作为参数。您也可以分别通过k或者m这两个字母来指定千个字节或者兆个字节(大小写都可以)。例如,下面的几种形式都是表示字节数:4194301,4096k,4096K,4m,和4M。一般选项-server在MacOSX中没有特别的服务器虚拟机(serverVM)。在激活java的时候可以使用-server选项,但这并不是启动另外的虚拟机,它还是启动客户虚拟机(clientVM),只是这个虚拟机针对服务器的使用环境进行了调优。这些调优包括:*在共享档案的生成过程中使用不同的类列表,这个列表中不包括GUI类(见“MacOSX的Java共享档案”部分)。*增加Java堆的尺寸。*增加Eden代的内存空间的尺寸。*打开线程的本地Eden垃圾收集器(garbagecollection)。-X显示一个非标准虚拟机选项的简要描述。-Xbootclasspath:path指定一个目录以及JAR和ZIP档案的列表,作为搜索启动类的范围。列表中各项之间的分隔符为冒号(:)。-Xfuture对类文件执行严格的格式检查。这个选项强制Java对是否遵守类文件规范做更加严格的检查,而缺省的检查只是基于Java1.1.x的标准。您应该使用这个选项来对代码进行测试,以便确保这些代码在未来的Java版本中能够工作,这些未来的版本可能强制进行更为严格的类文件格式检查。-Xprof把运行程序详细的行为分析数据发送给标准输出。在产品级的代码中不能使用这个选项。-Xrs和-XX:+ReduceSignalUsage选项一样。-XX:+ReduceSignalUsage正常情况下,Java响应SIGHUP,SIGINT,和SIGTERM信号。如果指定了这个选项,则Java会忽略这些信号,您要根据具体的需要在本地代码中实现这些信号的处理函数,同时还要在System.exit()中实现相关的关闭例程。-XX:ReservedCodeCacheSize=sizeinbytes设置最大的代码缓存的大小,缺省情况下是32(32M)。-XX:-PrintJavaStackAtFatalState缺省情况下,当本地代码崩溃时,Java会产生回溯(backtraces)信息。如果您在Java的错误报告中看到了崩溃的信息,则可以把这个选项关闭。MacOSX专用选项-Xdock:name=applicationName设定应用程序在Dock和菜单条上显示的名称。如果这个选项没有被设定,则缺省情况下MacOSX会显示主类的全名。您只需要对那些从命令行或者JAR文件中启动的程序设定这个选项,那些可以双击的应用程序包则从Info.plist文件中读取正确的显示名。-XX:+UseFileLocking这个选项用来激活Carbon文件的锁定功能,缺省情况下关闭。如果您的Java应用程序和一些文件相互作用,而这些文件同时又受到一些Carbon应用程序的影响,则您需要使用这个选项,它可以避免应用程序修改那些正在被别的程序访问的文件。堆的尺寸-Xmssizeinbytes设定Java堆的初始尺寸,缺省尺寸是2097152(2MB)。这个值必须是1024个字节(1KB)的倍数,且比它大。(-server选项把缺省尺寸增加到32M。)-Xmnsizeinbytes为Eden对象设定初始Java堆的大小,缺省值为640K。(-server选项把缺省尺寸增加到2M。)-Xmxsizeinbytes设定Java堆的最大尺寸,缺省值为64M,(-server选项把缺省尺寸增加到128M。)最大的堆尺寸达到将近2GB(2048MB)。请注意:很多垃圾收集器的选项依赖于堆大小的设定。请在微调垃圾收集器使用内存空间的方式之前,确认是否已经正确设定了堆的尺寸。垃圾收集:内存的使用-XX:MinHeapFreeRatio=percentageasawholenumber修改垃圾回收之后堆中可用内存的最小百分比,缺省值是40。如果垃圾回收后至少还有40%的堆内存没有被释放,则系统将增加堆的尺寸。-XX:MaxHeapFreeRatio=percentageasawholenumber改变垃圾回收之后和堆内存缩小之前可用堆内存的最大百分比,缺省值为70。这意味着如果在垃圾回收之后还有大于70%的堆内存,则系统就会减少堆的尺寸。-XX:NewSize=sizeinbytes为已分配内存的对象中的Eden代设置缺省的内存尺寸。它的缺省值是640K。(-server选项把缺省尺寸增加到2M。)-XX:MaxNewSize=sizeinbytes允许您改变初期对象空间的上限,新建对象所需的内存就是从这个空间中分配来的,这个选项的缺省值是640K。(-server选项把缺省尺寸增加到2M。)-XX:NewRatio=value改变新旧空间的尺寸比例,这个比例的缺省值是8,意思是新空间的尺寸是旧空间的1/8。-XX:SurvivorRatio=number改变Eden对象空间和残存空间的尺寸比例,这个比例的缺省值是10,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。-XX:TargetSurvivorRatio=percentage设定您所期望的空间提取后被使用的残存空间的百分比,缺省值是50。-XX:MaxPermSize=sizeinMB长久代(permanentgeneration)的尺寸,缺省值为32(32MB)。垃圾收集:一般设定-XincgcMacOSX不支持这个选项,不支持这种训练式的垃圾收集器。-Xnoclassgc禁用类的垃圾收集。-XX:+UseConcMarkSweepGC激活标志和清除同时进行的垃圾收集活动,这个选项对多处理器的计算机有效。-XX:+UseParallelGC激活并行的垃圾收集活动,这个选项只对多处理器的计算机有效。-XX:-DisableExplicitGC忽略代码中对System.gc()的显式调用。虚拟机仍然按照正常的机制进行垃圾收集。这个选项禁止在代码中强制执行垃圾收集。-XX:+PrintTenuringDistribution打印初期代中已分配内存的对象占用内存时间的信息。编译-Xint只在解释(interperated)模式下运行虚拟机。如果使用这个选项,系统将不编译任何字节码。-XX:CompileThreshold=value在编译开始前改变方法调用(程序分支)的数目,缺省值是1000。-XX:-InlineUnreachableCalls缺省情况下,虚拟机对所有可能的代码进行方法内联处理(methodinlining),以方便编译器进行优化。对这个选项进行设定会使较少的代码按照内联方法被编译。这样,那些正常情况下不会运行的代码,如例外处理,就不会被处理为内联代码,而只能在运行时进行解释。设定这个选项可能会大大降低性能。-XX:+CITime显示有多少时间花在编译过的代码上。-XX:+PrintCompilation在Java的方法被编译时,打印其的跟踪信息。Threading-XX:NewSizeThreadIncrease=sizeinKB允许您指定每个活动线程会增加多少初期对象空间。这个选项在调节由于线程增加而增加的分配率时可能会有用。它的缺省值为16(16kilobytes)。-XX:ThreadStackSize=sizeinKB改变线程栈的大小。缺省情况下,线程栈的大小就是操作系统所使用的栈的缺省大小。-XX:+UseTLAB激活线程本地的分配缓冲区。使用这个缓冲区将使线程任务繁重的应用程序的内存分配更加具有可扩展性,大大提高内存分配的性能。这个选项在多处理器的计算机和MacOSXServer上缺省打开。共享-XX:+PrintSharedSpace打开共享的冗长输出。-XX:-UseSharedSpaces关闭共享。附上经典文章:JVM性能调整的一些基本概念BykevinwuonFebruary5,20076:51PM|NoComments|NoTrackBacks作者徐永久本文是我在工作中调整Solaris8上的WebLogic6.0SP2中遇到诸多问题后,查阅相关资料而产生的一些概念,罗列出来,或许对您有所帮助。这并不代表,笔者推荐您使用WebLogic和Solaris的组合,相反,笔者欢迎相关Tomcat性能调整方面的心得。笔者在SunTechDay上和Bea公司的相关人员讨论后,认为Bea对OpenSource和FreeSoftware缺乏必要的远见。另外,其中一些术语的翻译,是我自己的”创作“,我不知道别人是怎样翻译的。如果有不当的地方,希望指正。堆(Heap)是Java程序的对象生活的地方,包含活的对象,死的对象以及剩余内存。当对象不能被运行中的程序的指针所到达时,这些对象成为”垃圾“。JVM的堆大小决定了VM花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。堆划分为两个区域:新生代和旧生代。新生代又分为:Eden和两片生存空间(survivorspaces)。其中保证有一片空间在任何时间是空的,当垃圾收集发生时,Eden中的活的对象复制到下一片生存空间,对象就在生存空间之间复制,直到到达最大门限值(老化),然后复制到旧生代。Eden是新的对象分配的地方。很多对象分配以后很快成为垃圾,这些对象称为具有infantmortality.对象生存的时间越长,需要的收集时间也越长,因此,收集变慢。你的应用建立和释放对象的速度决定了垃圾收集的频度。因此,在编程时,应注意使用对象的缓冲,而不是新建立对象。大多数对象在新生代就已经死去,因此你能有效的调整垃圾收集。如果你能安排大多数对象的生存期小于一个收集时间,那么,垃圾收集是十分高效的。错误的”代“配置会导致频繁的垃圾收集,影响系统性能。如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过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=192.168.0.101:7001-Dweblogic.management.username=system-Dweblogic.management.password=systemPasswordweblogic.Serverlogfile.txt在Solaris系统上,采用下面的命令:weblogic.Serverserver.out2&1JavaHotSpotVM选项标准的选项在各种平台都已经有介绍:://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html