参考:
一、 理论基础
参见《[Java性能剖析]Sun JVM内存管理和垃圾回收
》
二、 配置说明(重要部分加粗)
1. Memory配置
1) Heap Space配置
-
–Xmsn:初始堆空间,譬如-Xms512M
-
–Xmxn:最大堆空间,譬如-Xmx1024M,一般可指定这两个参数一致以避免在系统运行期间进行堆空间的调整
- –XX:MinHeapFreeRatio=minimum(默认40):当代空闲空间在代空间中比例大于maximum时,自动减少代空间以小于该值(将内存归还给操作系统)
- –XX:MaxHeapFreeRatio=maximum (默认70):当代空闲在代空间中比例小于minimum时,自动增长代空间以大于该值(向操作系统请求内存分配)
- -XX:YoungGenerationSizeIncrement=<Y>:Young Gen分配新内存时的增长比例,默认是20%(指符合MaxHeapFreeRatio时需要空间增长)
- -XX:TenuredGenerationSizeIncrement=<T>:Tenured Gen空间分配新内存时的增长比例,默认是20%(指符合MaxHeapFreeRatio时需要空间增长)
- -XX:AdaptiveSizeDecrementScaleFactor=<D>:空间缩小比例,如果空间增长比例是X,那么缩小比例是X/D(指符合MinHeapFreeRatio时需要空间缩小)
2) Perm Gen配置
-
–XX:PermSize=n:默认持久区大小,譬如–XX:PermSize=32M(server模式下默认是16M)
-
–XX:MaxPermSize=n:持久区最大空间,譬如–XX:MaxPermSize=128M,如果设置地过小,会导致OutOfMemory(PermSpace)错误(server模式下默认是64M)
3) 自适应目标设定(默认情况下JVM回自动调整Young Gen与Tenured Gen的比例、Eden Space与Suvivor的比例来达到性能目标)
- -XX:GCTimeLimit=time-limit :花费在GC上的时间上限,默认是98,当超过上限时,会抛出OutOfMemory(HeapSpace)的异常
- -XX:GCHeapFreeLimit=space-limit :Heap空闲空间的最低比例下限,默认是2,当超过下限时,会抛出OutOfMemory(HeapSpace)的异常
-
-XX:MaxGCPauseMillis=nnn :最长的GC暂停时间,如果时间过长,会相应调整空间的大小(单位是毫秒)
-
-XX:GCTimeRatio=nnn :最大的GC占总可用时间的比例,如果时间过长,会相应调整空间的大小(花费在GC上的时间比例不超过1 / (1 + nnn))
GC的处理优先级是MaxGCPauseMillis最高,GCTimeRatio次之,其他的空间大小配置优先级最低
4) Young Gen/Eden Space/Suvivor Space配置
- -XX:-UseAdaptiveSizePolicy :不使用自适应自动调整空间大小,要使用后面的配置,必须先配置这个选项(可以使用-XX:+UseAdaptiveSizePolicy启动自适应自动调整空间大小)
- –XX:NewSize=n:默认Young Gen的大小,譬如–XX:NewSize=400M
- -XX:MaxNewSize=n:Young Gen的最大大小,譬如–XX:MaxNewSize=400M
- –XX:NewRatio=n(默认server模式是8,client模式是2):Young Gen与Tenured Gen的比例
- –XX:SurvivorRatio=n(默认是32):Eden Space与Survivor Space的比例,譬如–XX:SurvivorRatio=7,则每个Survivor Space占整个Young Gen的1/9(注意,有两个Survivor区)
5) Thread Stack Space
- -XX:ThreadStackSize=<value>或-Xssn<value>:设置线程的栈大小(字节数)(0表示默认) [Sparc: 512, Solaris Intel: 256, Sparc 64bit: 1024 all others 0] GC配置,一般使用默认值即可
2.GC配置
1) Parallel and Parallel Compacting Collectors配置
-
-XX:+UseParallelGC :启用Parallel Collector
-
-XX:+UseParallelOldGC :启用Parallel Compacting Collector
- -XX:ParallelGCThreads=<N> :并行垃圾回收线程数(默认不需调整,与服务器的内核数一致)
2) CMS配置(这部分为了避免我的理解错误,直接给出E文说明)
-
-XX:+UseConcMarkSweepGC:启用CMS垃圾回收器
-
-XX:+CMSIncrementalMode :Enables incremental mode. Note that the concurrent collector must also be enabled (with -XX:+UseConcMarkSweepGC) for this option to work.(disabled)
- -XX:+CMSIncrementalPacing :Enables automatic pacing. The incremental mode duty cycle is automatically adjusted based on statistics collected while the JVM is running. (enabled) (Enables automatic control of the amount of work the CMS collector is allowed to do before giving up the processor, based on application behavior.)
- -XX:CMSIncrementalDutyCycle=<N> The percentage (0-100) of time between minor collections that the concurrent collector is allowed to run. If CMSIncrementalPacing is enabled, then this is just the initial value. (default 10)
- -XX:CMSIncrementalDutyCycleMin=<N> The percentage (0-100) which is the lower bound on the duty cycle when CMSIncrementalPacing is enabled. 10 0 -XX:CMSIncrementalSafetyFactor=<N> The percentage (0-100) used to add conservatism when computing the duty cycle. 10 10 -XX:CMSIncrementalOffset=<N> The percentage (0-100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections. (default 0)
- -XX:CMSExpAvgFactor=<N> The percentage (0-100) used to weight the current sample when computing exponential averages for the concurrent collection statistics. (default 25)
分享到:
相关推荐
### Sun JVM原理与内存管理 #### 一、Sun JDK 1.6 GC (Garbage Collector) Sun JDK 1.6 的垃圾收集器(GC)是其内存管理的关键组成部分,它负责自动地回收不再使用的对象所占用的内存。本文将详细介绍Sun JDK 1.6 GC...
#### Java虚拟机(JVM)参数配置说明 - **JVM参数**:为了更好地控制JVM的行为,可以使用一系列命令行参数,如设置初始堆大小(-Xms)、最大堆大小(-Xmx)、启用特定的垃圾收集器(-XX:+UseG1GC)等。这些参数对于...
在JVM启动参数中添加`-Dcom.sun.management.jmxremote`等相关选项。 - **连接远程JVM**:在VisualVM的"Remote"选项卡中,输入远程主机的IP地址、端口号和认证信息,然后点击"Connect"。 - **监控远程应用**:连接...
- **直接内存(Direct Memory)**:不在JVM内存区内,通过`java.nio.ByteBuffer.allocateDirect()`方式分配内存。 ##### 2. HotSpot运行时数据区域关系图 HotSpot虚拟机是Sun Microsystems开发的一款高性能的JVM实现...
它允许开发者深入了解JVM(Java虚拟机)的内部工作,包括内存分配、线程分析、类加载、JVM配置以及GC(垃圾收集)行为等。 在Java开发中,内存管理和垃圾回收是关键性能指标。VisualGC模块是VisualVM的一部分,专注...
每种GC策略都有其适用场景,通过调整这些参数,可以优化应用程序的性能。 3. **JIT编译器(Just-In-Time Compiler)**:HotSpot JVM 使用 JIT 编译器将运行时经常执行的字节码转化为机器码,以提高执行效率。C1 和 ...
JRockit还提供了更细致的功能用以观察JVM的运行状态,主要是独立的GUI控制台(只能适用于使用Jrockit才能使用jrockit81sp1_141_03自带的console监控一些cpu及memory参数)或者WebLogic Server控制台。 Bea JRockit ...
- **合理配置JVM参数**:根据应用程序的实际需求合理设置堆内存和其他内存区域的大小。 - **定期进行代码审查**:查找潜在的内存泄漏源。 - **使用工具辅助检测**:定期使用内存分析工具检查应用的内存使用情况。 #...
GC Roots 是一组必须活跃的引用,包括 Java 线程中,当前所有正在被调用的方法的引用类型参数、局部变量、临时值等。所有当前被加载的 Java 类。Java 类的引用类型静态变量。运行时常量池里的引用类型常量(String ...
《Sun JDK 1.6内存管理—调优篇》...综上所述,《Sun JDK 1.6内存管理—调优篇》提供了丰富的JVM内存管理和GC调优知识,通过理解并实践文中提到的各种调优技巧和模式,开发者能够显著提升Java应用程序的性能和稳定性。
3. **资源扩展**:当面对服务器资源不足的情况时,除了增加服务器数量之外,还可以通过优化JVM配置来提升现有服务器的性能。 4. **面试准备**:掌握JVM相关知识有助于面试时更加自信地回答面试官提出的问题,尤其是...
2. 修改 `setDomainEnv.cmd` 文件中的 `MEM_ARGS`,设置 `Xms` 参数来调整虚拟内存配置。 关于内存参数设置的疑问解答: 有时,设置 `-Xms` 和 `-Xmx` 不同会导致WebLogic只使用初始的 `-Xms` 内存大小,而不会...
### WebLogic 参数详解 ...通过上述参数配置的详细介绍,我们可以看出合理设置WebLogic和Tomcat的JVM参数对于提高系统性能、优化资源利用至关重要。在实际应用中,还需要根据具体的业务场景和技术需求进行调整优化。
堆内存溢出(Out of Memory Error)是常见的运行时错误,通常是由于分配给JVM的内存不足导致的。解决方法包括增大堆大小、优化对象生命周期、减少内存消耗等。 7. 深入源码理解 通过阅读JDK源码,我们可以更深入地...
Sun公司开发的JVM是一个分代的JVM,将堆内存分为两个主要部分:年轻代和老年代。年轻代是存放新创建对象的地方,而老年代则是存放生命周期较长的对象。 在Java应用程序中,最常见的两个内存问题为Java 停止-世界...
解决过程中,首先尝试了SUN提供的性能跟踪工具`jvmstat`,但发现JVM内存使用情况正常,GC(垃圾收集)也没有异常。接着搜索了"Out of swap space"的问题,但没有找到直接的解决方案。然后尝试通过`-XX:+...
以下是对Java内存管理的精彩概述,主要基于Sun Hotspot JVM,但请注意,不同JVM可能有不同的实现方式。 1. **Java对象在内存中的存储** Java对象在内存中的分配主要发生在堆上,这是所有类实例和数组的内存来源。...
- **WAS 3.5 和 4.01 (z/OS)**:配置相应的 JVM 参数。 - **WAS 3.5 (分布式环境)**:从 3.5.6 版本开始支持。 - **WAS 4.x (分布式环境)**:配置相应的 JVM 参数。 - **WAS 5.0 (分布式环境)**:配置相应的 JVM ...
- 为了减少Full GC的频率,JVM提供了不同的堆内存参数配置,如-XX:NewRatio用于设置年轻代和老年代的比例。 通过这些知识点,我们可以全面了解Java虚拟内存的管理机制,以及如何监控和优化JVM的性能。以上内容均...