Java虚拟机的选项
程序员文章站
2022-07-15 14:50:20
...
Mac OS X的Java虚拟机除了具有标准的HotSpot虚拟机的选项之外,还支持很多非标准的选项(-X和-XX),本章列出了这些选项以及一些值得注意的例外事项。
请注意: 除非特别声明,否则在一个选项中指定的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
关闭共享。
请注意: 除非特别声明,否则在一个选项中指定的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
关闭共享。
推荐阅读