JVM参数调整无非是调整堆中各种内存的大小,选择最优的GC算法(行为)。一般有两个指标来考量:
1)Pause时间
2)Throughput
GC类型有:
1. Serial GC
The serial collector uses a single thread to perform all garbage collection work, which makes it relatively efficient since there is no communication overhead between threads. It is best-suited to single processor machines, since it cannot take advantage of multiprocessor hardware, although it can be useful on multiprocessors for applications with small data sets (up to approximately 100MB). The serial collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseSerialG
2. The Throughput Collector
-XX:+UseParallelGC 主要是正对young generation的,Tenured Generation还是Serial Collector
The parallel collector (also known as the throughput collector) performs minor collections in parallel, which can significantly reduce garbage collection overhead. It is intended for applications with medium- to large-sized data sets that are run on multiprocessor or multi-threaded hardware. The parallel collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseParallelGC
.
-
New: parallel compaction is a feature introduced in J2SE 5.0 update 6 and enhanced in Java SE 6 that allows the parallel collector to perform major collections in parallel. Without parallel compaction, major collections are performed using a single thread, which can significantly limit scalability. Parallel compaction is enabled by adding the option
-XX:+UseParallelOldGC
to the command line
3. The Concurrent Low Pause Collector
-Xincgc or -XX:+UseConcMarkSweepGC 主要是正对Tenure Generation的
The concurrent collector performs most of its work concurrently (i.e., while the application is still running) to keep garbage collection pauses short. It is designed for applications with medium- to large-sized data sets for which response time is more important than overall throughput, since the techniques used to minimize pauses can reduce application performance. The concurrent collector is enabled with the option -XX:+UseConcMarkSweepGC
.
4. The Incremental Low Pause Collector
-XX:+UseTrainGC
下面介绍一下各种参数的意义
1. -Xms -Xmx
Heap 内存设置
堆内存不是一下子就分配-Xmx大小的,随着GC的进行,从-Xms慢慢递增的
基本来说Heap内存分配太大的话,GC的次数会减少,但是做一次GC的Pause时间会很大。反之亦然。
2. -Xincgc
Incremental GC,也即GC的Train算法, 增量GC一次只收集部分Heap对象,而不是针对整个堆。如果GC Pause 时间太长的话可以考虑用这个选项调试一下
3. -Xss
栈大小设置,从Java6开始,32-bit JVM默认是320k,64-bit JVM默认是1024k。(题外话,64-bit JVM并不会所有类型double一下,只是可分配的Heap内存和线程数会更多)
注意栈大小设置太小的话,递归多的话会出现栈溢出;栈太大的话,如果Application中线程比较多(每个线程有自己的栈),可分配的栈变少,就会出现 running out of memeory问题。
4. Server 和 Client端GC策略不同,考虑到可用的Heap Size,CPU数量等。
分享到:
相关推荐
【HotSpot GC官网文档截图 - 20200917】是一个珍贵的资源集合,包含了一系列关于Java HotSpot虚拟机(JVM)垃圾收集器(GC)的官方文档截图。这些截图详细介绍了GC的发展历程、不同版本的特性、选择GC的策略以及调优...
Java虚拟机(JVM)是Java程序运行的基础,它的配置参数和垃圾收集(GC)机制对于优化应用程序性能至关重要。本文将深入探讨JVM参数及其与Java垃圾收集相关的知识。 一、JVM参数详解 JVM参数可以分为三类:启动参数...
### Sun Hotspot V1.6.0 JVM GC详解 #### 一、JVM结构与GC基础知识 ##### 1.1 JVM内存结构概述 Java虚拟机(JVM)内存主要分为以下几个部分: - **程序计数器(PC Register)**:记录当前线程所执行的字节码指令...
本文将深入探讨Java HotSpot虚拟机的部分参数及其作用,帮助开发者更好地理解和调整JVM的配置,以优化应用程序性能。 一、JVM启动参数类型 Java HotSpot虚拟机的参数可以分为三类: 1. 标准选项(-X):由Sun ...
通过设置 `-XX:+UseG1GC` 参数启用 G1,并通过调整 `-XX:MaxGCPauseMillis` 控制最大的 GC 暂停时间。 2. **调整年轻代和老年代比例**:根据业务特点,如果系统中新创建的对象较多,可以适当增加年轻代的比例;...
5. **垃圾收集调优参数**:通过JVM参数可以调整GC行为,例如`-Xms`和`-Xmx`设置堆大小,`-XX:NewRatio`调整年轻代与老年代的比例,`-XX:SurvivorRatio`设置Survivor区的比例,`-XX:+UseConcMarkSweepGC`启用CMS收集...
同时,会讲解如何通过JVM参数调整内存大小、设置垃圾收集策略、优化线程池等,以达到最佳的运行效果。 书中还可能讨论到HotSpot的编译优化技术,如逃逸分析、标量替换、内联等,这些都是JIT编译器提高性能的关键...
8. **堆大小调整**:通过设置JVM参数-Xms和-Xmx可以设定堆的最小和最大大小,以适应不同应用的需求。过大可能导致内存浪费,过小可能导致频繁的垃圾收集甚至内存溢出。 9. **内存泄漏**:虽然Java有自动内存管理,...
因此,HotSpot虚拟机允许开发者通过JVM参数来控制是否启用偏见锁以及其生命周期。 6. **JVM参数调整** 开发者可以通过以下JVM参数来调整偏见锁的行为: - `-XX:+UseBiasedLocking`:启用偏见锁。 - `-XX:...
启动参数设置主要是设置GC参数,线程设置主要是设置线程的数量,数据库连接池的设置主要是设置连接池的初始容量和最大容量。 四、WebLogic启动文件 WebLogic启动文件包括startWebLogic.cmd和commEnv.cmd。start...
Oracle HotSpot Virtual Machine 中使用了多种垃圾回收算法,包括 Serial GC、Parallel GC、Concurrent Mark-and-Sweep (CMS) GC、G1 GC 等。这些算法的选择取决于应用程序的具体需求和性能要求。 Serial GC 是最...
吞吐量目标则关注整个应用程序运行期间,垃圾收集占用的时间比例,可通过 `-XX:GCTimeRatio` 参数设置。当这两个目标都已满足时,垃圾收集器会尝试调整堆大小以减小内存占用,即优化空间(Footprint)。 垃圾收集器...
3. **其他调优参数**:除了上述基础设置外,还有许多其他参数可用于进一步优化GC行为,例如调整新生代和老年代的比例、选择特定的垃圾回收算法等。 #### 32位与64位系统的堆大小差异 - 对于32位进程模型,进程的...
启动参数设置主要是设置 GC 参数,例如设置 heap 的大小和垃圾回收的频率。线程设置主要是设置线程的数量,例如设置最小线程数和最大线程数。数据库连接池设置主要是设置连接池的初始容量和最大容量。 4. 启动文件 ...
HotSpot 虚拟机中的垃圾收集参数可以通过命令行选项或 JVM 选项来设置。常见的垃圾收集参数包括: * -Xms:设置初始堆大小 * -Xmx:设置最大堆大小 * -XX:NewSize:设置 young generation 的大小 * -XX:MaxNewSize...
在GC监控方面,除了使用JMX参数外,还可以使用-Xloggc:文件参数来记录GC日志,并通过-XX:+PrintGCDetails等参数打印GC的详细信息。 优化建议包括合理设置堆内存大小,选择合适的垃圾回收器,调整新生代与老年代的...
- 使用JVM参数(如-Xms, -Xmx设置堆内存大小,-XX:+UseG1GC选择垃圾收集器)来优化性能。 - `-XX:`选项用于设置HotSpot特定的JVM行为。 - 使用`jinfo`, `jmap`, `jstat`, `jstack`等工具进行实时监控和诊断。 总的...
以及合理设置JVM的内存参数,如`-Xms`和`-Xmx`,以适应应用的内存需求。 总的来说,理解Java虚拟机中GC的基本原理,并掌握如何调整和优化GC,是提升Java应用性能的关键。开发者应关注GC的工作机制,以便更好地控制...
本文将对 JDK11 HotSpot 虚拟机垃圾收集调整指南进行详细解析,涵盖垃圾收集机制、垃圾收集器类型、垃圾收集调整参数等知识点。 垃圾收集机制 在 Java 应用程序中,垃圾收集机制是指虚拟机自动 回收无用对象的过程...