Java HotSpot VM
来源:互联网 发布:沪昆高铁质量 知乎 编辑:程序博客网 时间:2024/06/06 16:34
(本文JDK版本
JDK 7 and earlier releases
)Oracle官网有相关Reference
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
SUN的JDK版本从1.3.1开始使用HotSpot虚拟机技术。
HotSpot是较新的Java虚拟机技术,用来代替JIT(Just in Time)技术,可以大大提高Java运行的性能。
Java原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢。而该技术将常用的部分代码编译为本地(原生,native)代码,这样
显著提高了性能。
用于服务器版和标准版的HotSpot有所不同。
其他的Java虚拟机也有类似的技术。
HotSpot JVM 参数可以分为标准参数(standard options)和非标准参数(non-standard options)。
标准参数相对稳定,在JDK未来的版本里不会有太大的改动。
非标准参数则有因升级JDK而改变的可能。
java启动参数共分为三类(其中非标准又分为-X和-XX);
其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
标准参数:
-client
使用Java HotSpot 客户端版VM。
-server
使用Java HotSpot 服务器版VM。如果是64位的JDK,默认只有server版,所以以上两个参数对64位版本JDK无效。
JDK包括2个JVM的实现
Java HotSpot Client VM(-client),为在客户端环境中减少启动时间而优化;
Java HotSpot Server VM(-server),为在服务器环境中最大化程序执行速度而设计.
比较:Server VM启动比Client VM慢,运行比Client VM快.
如何将VM设置成 Server VM:
找到 [jre安装目录]/lib/i386/jvm.cfg 文件
里面第一行写的是 -client 默认就是client版本,把第二行的-server KNOWN 放到
第一行,如下面所示
代码
-server KNOWN
-client KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR
加载本地代理函数库, e.g.
-agentlib:jdwp=help
-agentpath :pathname [=options]
使用给定的路径加载本地代理库。
-classpath classpath
-cp classpath
不用说了。
-Dproperty =value
设置一个系统属性。
-d32
-d64
要求程序在32位或64位下跑,未来这个参数可能有变。
-enableassertions [:<package name>"..." | :<class name> ]
-ea [:<package name>"..." | :<class name> ]
开启断言。
-disableassertions [:<package name>"..." | :<class name> ]
-da [:<package name>"..." | :<class name> ]
关闭断言。
-enablesystemassertions
- esa
启动所有系统类的断言。
-disablesystemassertions
-dsa
关闭所有系统类的断言。
-jar
这个也没什么说的。
-javaagent :jarpath [=options]
加载Java 程序语言代理
-verbose:class
输出每个加载的类详细信息。
-verbose:gc
输出GC的详细信息。
-verbose:jni
输出本地方法接口的调用信息。
-version
-help
-?
不用说了。
-X
显示可用的非标准参数
非标准参数:
-Xint
以解释模式运行。JVM不会使用HotSpot的新特性,不会将部分常用代码编译为本地代码,所有代码都以字节码的方式解释运行。你可以理解为使用JDK1.3.1以前的JIT方式运行程序。
-Xbatch
不使用后台编译。
-Xbootclasspath:bootclasspath
使用bootstrap classloader 加载指定路径的class或jar,这是种完全覆盖默认系统类加载的方案,慎用。
-Xbootclasspath/a:bootclasspath
将指定的classpath追加到默认的bootclasspath的后面加载
-Xbootclasspath/p:bootclasspath
将指定的classpath追加到默认的bootclasspath的前面加载
-Xcheck:jni
在调用JNI函数时做额外的检查。这个参数会降低JVM的执行性能。
-Xfuture
执行严格的class文件格式检查,不加这个参数,默认使用JDK1.1.* 版本的class格式检查方法。
-Xnoclassgc
禁用class垃圾收集。
-Xincgc
开启增量垃圾收集机制。默认为关闭。增量垃圾收集能减少因垃圾收集而引起的程序中断,它会在程序运行期间不定期地以并发的方式运行,在运行期间不会引起中断但是会减少分配给程序的cpu资源。
-Xloggc:file
GC详情日志。效果如-verbose:gc ,不过这个可以输出到一个文件。除了-verbose:gc包含的信息,还有显示发生的时间。 文件可以是远程的,但是考虑到网络延迟会引起JVM中断,一般建议使用本地文件,
-Xms
分配的堆空间初始值:
-Xms6291456
-Xms6144k
-Xms6m
-Xmx
分配的堆空间最大值:
-Xmx83886080
-Xmx81920k
-Xmx80m
-Xmn
设置年轻代大小。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-Xmn200m
-Xprof
在运行程序时给出分析数据。适用于开发环境,不适用于生产环境。
-Xrs
减少JVM的操作系统信号的使用量。
-Xss
设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
非标准-XX参数
有三种-XX参数的形式:
- Boolean 型的参数 开启如 -XX:+<option> 关闭如 -XX:-<option>.
- Numeric 型参数 -XX:<option>=<number>. 数字可以包括单位 'm' 或 'M' 代表MB, 'k' or 'K' 代表KB, 'g' or 'G' 代表 GB ,没有单位意味着bytes。
- String 参数 -XX:<option>=<string>
以下是-XX参数列表,本来想都翻译过来,但是发现一些技术术语如果硬是翻译可能会导致词不达意,因此大部分描述都保持原文。
0 - no prefetch instructions are generate*d*,
1 - execute prefetch instructions after each allocation,
2 - use TLAB allocation watermark pointer to gate when prefetch instructions are executed.
<cmd args>"Run user-defined commands when an OutOfMemoryError is first thrown. (Introduced in 1.4.2 update 12, 6)-XX:-PrintClassHistogramPrint a histogram of class instances on Ctrl-Break. Manageable . (Introduced in 1.4.2.) Thejmap -histo command provides equivalent functionality.-XX:-PrintConcurrentLocksPrint java.util.concurrent locks in Ctrl-Break thread dump. Manageable . (Introduced in 6.) Thejstack -l command provides equivalent functionality.-XX:-PrintCommandLineFlagsPrint flags that appeared on the command line. (Introduced in 5.0.)-XX:-PrintCompilationPrint message when a method is compiled.-XX:-PrintGCPrint messages at garbage collection. Manageable .-XX:-PrintGCDetailsPrint more details at garbage collection. Manageable . (Introduced in 1.4.0.)-XX:-PrintGCTimeStampsPrint timestamps at garbage collection. Manageable (Introduced in 1.4.0.)-XX:-PrintTenuringDistributionPrint tenuring age information.-XX:-TraceClassLoadingTrace loading of classes.-XX:-TraceClassLoadingPreorderTrace all classes loaded in order referenced (not loaded). (Introduced in 1.4.2.)-XX:-TraceClassResolutionTrace constant pool resolutions. (Introduced in 1.4.2.)-XX:-TraceClassUnloadingTrace unloading of classes.-XX:-TraceLoaderConstraintsTrace recording of loader constraints. (Introduced in 6.)-XX:+PerfSaveDataToFileSaves jvmstat binary data on exit.
- Java HotSpot VM 参数
- Java HotSpot VM 簡介
- Java HotSpot VM 簡介
- Java HotSpot VM Options
- Java HotSpot VM Options
- Java Hotspot VM [顶]
- Java HotSpot VM Options
- Java HotSpot VM Options
- Java HotSpot VM
- Java HotSpot VM Options
- Java HotSpot VM Options
- Java HotSpot VM Options
- Java HotSpot VM Options
- Java HotSpot Client VM 和 Java HotSpot Server VM
- Java HotSpot Client VM 和 Java HotSpot Server VM
- JAVA HOTSPOT VM参数大全
- Java HotSpot VM命名参数选项详解
- Java HotSpot VM命名参数选项详解
- node ->rman to RAC (迁移)
- wamp修改mysql空密码及取消phpmyadmin的自动登录
- Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
- Unity3D【脚本】把一个ui物体,对准世界坐标中的物体,可以实现例如血条等
- android开发之eclipse调试debug模式详解
- Java HotSpot VM
- android uiautomator学习(一)创建工程
- 用std::string取代char*
- android sdk安装2(解决安卓 sdk 无法更新)
- C基础入门笔记1
- string和stringBuilder区别
- spring 动态配置定时任务
- 《孙鑫老师谈如何学好编程》摘要
- 【点击模型学习笔记】Inferring clickthrough rates on ads from click behavior on search results_wsdm2011