- 浏览: 584349 次
- 性别:
- 来自: 0
文章分类
最新评论
-
springOfJava:
中岛嘉兰 写道jdk8表示都是waiting...wait01 ...
最简实例说明wait、notify、notifyAll的使用方法 -
中岛嘉兰:
中岛嘉兰 写道jdk8表示都是waiting...wait01 ...
最简实例说明wait、notify、notifyAll的使用方法 -
中岛嘉兰:
jdk8表示都是waiting...wait01 begin ...
最简实例说明wait、notify、notifyAll的使用方法 -
zhoujianboy:
推荐一篇文章 JVM内存模型和JVM参数的关系:http:// ...
图解JVM内存模型 -
timothy2005:
楼主最下方的链接是不是放错了?原本说该篇文章列出了其中一种自定 ...
图解classloader加载class的流程及自定义ClassLoader
/**
* 转载请注明作者longdick http://longdick.iteye.com
*
*/
(本文JDK版本6.0)
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而改变的可能。
标准参数:
-client
使用Java HotSpot 客户端版VM。
-server
使用Java HotSpot 服务器版VM。如果是64位的JDK,默认只有server版,所以以上两个参数对64位版本JDK无效。
-agentlib:
libname
[=options]
加载本地代理函数库, 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
-Xprof
在运行程序时给出分析数据。适用于开发环境,不适用于生产环境。
-Xrs
减少JVM的操作系统信号的使用量。
-Xss
线程栈内存。
非标准-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参数列表,本来想都翻译过来,但是发现一些技术术语如果硬是翻译可能会导致词不达意,因此大部分描述都保持原文。
-XX:-AllowUserSignalHandlers | 允许使用用户自定义的信号处理器 (只对应Solaris和Linux) |
-XX:AltStackSize=16384 | 修改栈容量 (单位 Kb) (对应Solaris, JDK 5.0以后弃用) |
-XX:-DisableExplicitGC | 禁止手动调用System.gc() |
-XX:+FailOverToOldVerifier | 如果新的类型校验器验证失败使用旧版本的类型校验器 (开始于JDK6.) |
-XX:+HandlePromotionFailure | The youngest generation collection does not require a guarantee of full promotion of all live objects. (Introduced in 1.4.2
update 11) [5.0 and earlier: false.] |
-XX:+MaxFDLimit | 将文件描述符加到最大 (对应Solaris) |
-XX:PreBlockSpin=10 | Spin count variable for use with -XX:+UseSpinning. Controls the
maximum spin iterations allowed before entering operating system thread
synchronization code. (Introduced in 1.4.2.) |
-XX:-RelaxAccessControlCheck | 放宽类型校验机的准入控制(JDK6) |
-XX:+ScavengeBeforeFullGC | 在full GC之前先做年轻代GC (开始于JDK1.4.1.) |
-XX:+UseAltSigs | Use alternate signals instead of SIGUSR1 and SIGUSR2 for VM
internal signals. (Introduced in 1.3.1 update 9, 1.4.1. Relevant to
Solaris only.) |
-XX:+UseBoundThreads | Bind user level threads to kernel threads. (Relevant to
Solaris only.) |
-XX:-UseConcMarkSweepGC | 使用并发的mark-sweep GC收集年老代
(始于JDK1.4.1) |
-XX:+UseGCOverheadLimit | 使用一种限制VM做GC操作的时间所占比例过高的策略 (始于JDK6.) |
-XX:+UseLWPSynchronization | 使用轻量级进程同步替代线程同步 (始于JDK1.4.0. Solaris相关) |
-XX:-UseParallelGC | 使用并发平行GC(始于JDK1.4.1) |
-XX:-UseParallelOldGC | 使用并发平行GC做 full GC. (始于JDK5.0
update 6.) |
-XX:-UseSerialGC | 使用串行GC (始于JDK5.0.) |
-XX:-UseSpinning | Enable naive spinning on Java monitor before entering operating
system thread synchronizaton code. (Relevant to 1.4.2 and 5.0 only.)
[1.4.2, multi-processor Windows platforms: true] |
-XX:+UseTLAB | Use thread-local object allocation (Introduced in 1.4.0, known as
UseTLE prior to that.) [1.4.2 and earlier, x86 or with -client: false] |
-XX:+UseSplitVerifier | Use the new
type checker with StackMapTable attributes. (Introduced in 5.0.)[5.0: false] |
-XX:+UseThreadPriorities | Use native thread priorities. |
-XX:+UseVMInterruptibleIO | Thread interrupt before or with EINTR for I/O operations results in OS_INTRPT. (Introduced in 6. Relevant to Solaris only.) |
-XX:+AggressiveOpts | Turn on point performance compiler optimizations that are expected
to be default in upcoming releases. (Introduced in 5.0 update 6.) |
-XX:CompileThreshold=10000 | Number of method invocations/branches before compiling [-client: 1,500] |
-XX:LargePageSizeInBytes=4m | Sets the large page size used for the Java heap. (Introduced in 1.4.0 update 1.) [amd64: 2m.] |
-XX:MaxHeapFreeRatio=70 | Maximum percentage of heap free after GC to avoid shrinking. |
-XX:MaxNewSize=size | Maximum size of new generation (in bytes). Since 1.4, MaxNewSize is
computed as a function of NewRatio. [1.3.1 Sparc: 32m; 1.3.1 x86:
2.5m.] |
-XX:MaxPermSize=64m | Size of the Permanent Generation. [5.0 and newer: 64 bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.] |
-XX:MinHeapFreeRatio=40 | Minimum percentage of heap free after GC to avoid expansion. |
-XX:NewRatio=2 | Ratio of new/old generation sizes. [Sparc -client: 8; x86 -server: 8; x86 -client: 12.]-client: 4 (1.3) 8 (1.3.1+), x86: 12] |
-XX:NewSize=2.125m | Default size of new generation (in bytes) [5.0 and newer: 64 bit VMs are scaled 30% larger; x86: 1m; x86, 5.0 and older: 640k] |
-XX:ReservedCodeCacheSize=32m | Reserved code cache size (in bytes) - maximum code cache size.
[Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier,
Solaris 64-bit and and64: 1024m.] |
-XX:SurvivorRatio=8 | Ratio of eden/survivor space size [Solaris amd64: 6; Sparc in 1.3.1: 25; other Solaris platforms in 5.0 and earlier: 32] |
-XX:TargetSurvivorRatio=50 | Desired percentage of survivor space used after scavenge. |
-XX:ThreadStackSize=512 | Thread Stack Size (in Kbytes). (0 means use default stack size)
[Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc
64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all
others 0.] |
-XX:+UseBiasedLocking | Enable biased locking. For more details, see this tuning
example
. (Introduced in 5.0 update 6.) [5.0: false] |
-XX:+UseFastAccessorMethods | Use optimized versions of Get<Primitive>Field. |
-XX:-UseISM | Use Intimate Shared Memory. [Not accepted for non-Solaris
platforms.] For details, see Intimate Shared Memory
. |
-XX:+UseLargePages | Use large page memory. (Introduced in 5.0 update 5.) For details, see Java Support for Large Memory
Pages
. |
-XX:+UseMPSS | Use Multiple Page Size Support w/4mb pages for the heap. Do not use
with ISM as this replaces the need for ISM. (Introduced in 1.4.0 update
1, Relevant to Solaris 9 and newer.) [1.4.1
and earlier: false] |
-XX:+StringCache | Enables caching of commonly allocated strings. |
-XX:AllocatePrefetchLines=1 | Number of cache lines to load after the last object allocation
using prefetch instructions generated in JIT compiled code. Default
values are 1 if the last allocated object was an instance and 3 if it
was an array. |
-XX:AllocatePrefetchStyle=1 | Generated code style for prefetch instructions. 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. |
-XX:-CITime | Prints time spent in JIT Compiler. (Introduced in 1.4.0.) |
-XX:ErrorFile=./hs_err_pid<pid>.log | If an error occurs, save the error data to this file. (Introduced in 6.) |
-XX:-ExtendedDTraceProbes | Enable performance-impacting dtrace
probes. (Introduced in 6.
Relevant to Solaris only.) |
-XX:HeapDumpPath=./java_pid<pid>.hprof | Path to directory or filename for heap dump. Manageable
.
(Introduced in 1.4.2 update 12, 5.0 update 7.) |
-XX:-HeapDumpOnOutOfMemoryError | Dump heap to file when java.lang.OutOfMemoryError is thrown. Manageable
.
(Introduced in 1.4.2 update 12, 5.0 update 7.) |
-XX:OnError="<cmd args>;<cmd args>" | Run user-defined commands on fatal error. (Introduced in
1.4.2 update 9.) |
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>" |
Run user-defined commands when an OutOfMemoryError is first thrown. (Introduced in 1.4.2 update 12, 6) |
-XX:-PrintClassHistogram | Print a histogram of class instances on Ctrl-Break. Manageable
. (Introduced in 1.4.2.) The jmap -histo
command provides equivalent functionality. |
-XX:-PrintConcurrentLocks | Print java.util.concurrent locks in Ctrl-Break thread dump. Manageable
.
(Introduced in 6.) The jstack -l
command provides equivalent functionality. |
-XX:-PrintCommandLineFlags | Print flags that appeared on the command line. (Introduced in 5.0.) |
-XX:-PrintCompilation | Print message when a method is compiled. |
-XX:-PrintGC | Print messages at garbage collection. Manageable
.
|
-XX:-PrintGCDetails | Print more details at garbage collection. Manageable
. (Introduced in 1.4.0.) |
-XX:-PrintGCTimeStamps | Print timestamps at garbage collection. Manageable
(Introduced in 1.4.0.) |
-XX:-PrintTenuringDistribution | Print tenuring age information. |
-XX:-TraceClassLoading | Trace loading of classes. |
-XX:-TraceClassLoadingPreorder | Trace all classes loaded in order referenced (not loaded).
(Introduced in 1.4.2.) |
-XX:-TraceClassResolution | Trace constant pool resolutions.
(Introduced in 1.4.2.) |
-XX:-TraceClassUnloading | Trace unloading of classes. |
-XX:-TraceLoaderConstraints | Trace recording of loader constraints.
(Introduced in 6.) |
-XX:+PerfSaveDataToFile | Saves jvmstat binary data on exit. |
参考资料:
http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
发表评论
-
jvm crash,疑似GC的bug
2010-11-18 11:16 4177在对一个应用做压力的时候,不定时发生jvm crash,查看h ... -
三种GC大揭秘
2009-09-23 09:12 10070/** * 转载请注明作者longdick ht ... -
图解JVM内存模型
2009-09-22 00:25 23683/** * 转载请注明作 ... -
图解JVM在内存中申请对象及垃圾回收流程
2009-09-14 14:15 11180/** * 转载请注明作 ... -
Java序列化算法透析
2009-08-27 20:31 8641/** * 转载请注明作 ... -
图解classloader加载class的流程及自定义ClassLoader
2009-08-07 11:59 65067/** * 转载请注明作者longdick ht ... -
ClassLoader分析
2007-11-08 15:38 1648ClassLoader 是 Java 虚拟机 ... -
Class Loading ---(类装载机制,开发者不得不知道的故事)
2007-11-09 10:29 1742http://blog.csdn.net/totodo/arc ...
相关推荐
HotSpot VM是Oracle JDK中默认的JVM实现,它提供了一种称为HSDB(HotSpot Debugger Bridge)的工具,用于在运行时查看和分析JVM内部的数据。本篇将通过HSDB的使用案例来探讨HotSpot VM的运行时数据。 首先,我们...
Java HotSpot VM 提供了两种主要的优化目标:最大暂停时间和应用吞吐量。最大暂停时间目标通过 `-XX:MaxGCPauseMillis` 参数设定,目标是限制垃圾收集暂停的最长时间,以保证应用程序的响应性。吞吐量目标则关注整个...
HotSpot运行时系统是Java虚拟机(JVM)的一个实现,专注于提供高性能的Java应用程序执行环境。本节将深入探讨其关键子系统和概念。 首先,我们关注的是**命令行参数处理**。Java HotSpot虚拟机接受多种命令行选项和...
Java虚拟机(JVM)是Java...阅读“java hotspot vm options.pdf”、“java se 6 hotspot[tm] virtual machine garbage collection tuning.pdf”和“java工具选项文档.pdf”等资料,将有助于深入学习和实践这些知识。
### JVM技术精华——架构师必备知识点...通过深入理解HotSpot VM的历史背景和发展过程,以及Java内存结构的基本概念,架构师们能够更好地掌握Java应用程序的性能调优技巧,这对于提高软件系统的稳定性和性能至关重要。
《Java平台标准版HotSpot虚拟机垃圾收集调优指南》是针对Java HotSpot虚拟机(Java HotSpot VM)内建的垃圾收集算法的一份详细指南,旨在帮助开发者和系统管理员选择最适合他们应用需求的垃圾收集策略。这份文档适用...
- **参数调整**:HotSpot VM的性能可以通过设置启动参数来优化,例如使用`-server`选项选择Server VM。内存参数配置也至关重要,包括堆大小(`-Xms`和`-Xmx`)、新生代大小(`-NewSize`和`-MaxNewSize`)、年老代...
Hotspot源码是Java开发中的重要参考资料,它揭示了Java虚拟机(JVM)的工作原理。Oracle JDK中的Hotspot JVM是Java程序运行的核心,负责字节码解释、编译优化以及垃圾回收等关键任务。Hotspot源码的分析有助于开发者...
在 HotSpot 的源代码中,`JavaCalls` 类位于 `hotspot/src/share/vm/runtime/javaCalls.hpp` 文件内。该类提供了一系列用于进行静态调用 (`call_static`)、特殊调用 (`call_special`) 和虚调用 (`call_virtual`) 的...
它曾经是Oracle公司的一个重要产品,但现在已被Java HotSpot VM所取代,后者是Oracle JDK的一部分。JRockit以其优秀的垃圾收集算法、内存管理和性能分析工具而知名。 JRockit JDK 1.6.0_45是这个版本的特定构建,R...
4. **JVM的发展历程**:从早期的Classic VM到Exact VM,再到现在的HotSpot VM,JVM不断优化,引入了如JIT编译器和热点代码探测技术,提升了性能。HotSpot VM在JDK 6、8等版本中成为默认选择,因其能够平衡优化响应...
- **`java.vm.vendor`**:显示Java虚拟机实现的供应商,如HotSpot、OpenJ9等。 - **`java.vm.name`**:给出了实际运行的Java虚拟机实现的名称,例如“OpenJDK 64-Bit Server VM”。 #### Java 运行时环境规范 - **...
在使用Eclipse进行开发的过程中,有时可能会遇到JVM(Java虚拟机)错误的问题。这类问题通常表现为启动Eclipse时出现错误提示,例如“jvm terminated. Exit code=-1”。本文将详细介绍这一问题的原因以及具体的解决...
JVM的种类繁多,包括Sun Classic VM、Exact VM、HotSpot VM、JRockit(由BEA公司开发,后被Oracle收购)、J9(IBM公司的产品)以及阿里巴巴的TaobaoJVM。其中,HotSpot VM是Sun JDK和OpenJDK的标准虚拟机,以其热点...
- **Sun HotSpot VM**:这是目前最为广泛使用的Java虚拟机之一,被集成在Oracle JDK中。HotSpot VM以其高性能和先进的垃圾回收技术而闻名,能够显著提高Java应用程序的运行效率。 - **KVM**:专为嵌入式设备设计的轻...
书中列举了不同类型的JVM,如经典的HotSpot VM,适用于移动设备的Mobile/Embedded VM,以及针对高性能计算的Azul VM等,展示了Java虚拟机的多样性。 Java虚拟机家族的演变反映了Java技术的发展历程。例如,HotSpot ...
总之,hsdis-amd64.dylib是Java开发者手中的一把利器,它揭示了HotSpot VM JIT编译的神秘面纱,为我们的性能优化之路提供了宝贵的洞察。在JDK1.8中,通过正确配置和使用hsdis-amd64.dylib,我们可以深入探究代码执行...
- 内置HotSpot VM - 改进RMI对CORBA的兼容性 - 加入动态代理相关类 - JDNI (Java Naming and Directory Interface) - JPDA (Java Platform Debugger Architecture) - **2002年:Java 1.4** - 代号:Merlin -...
随着技术进步,后来的JVM如HotSpot VM引入了即时编译(JIT)技术,提高了运行效率。 在Java虚拟机中,内存管理是非常关键的部分。Java程序中的内存主要分为堆内存和栈内存。堆内存用于存储对象实例,当分配的内存...