堆 新生代 (伊甸园区 幸存区(2个幸存区使用的是复制算法,也叫from,to区)) 老年代
一般初始化的对象先到新生代,除非对象很大会直接到老年代,在gc新生代之后幸存的对象会到幸存区。经过多次gc之后依然存活的对象会被移到老年区长期存在。
-XX:+UserSerialGc 最古老最稳当
新生代、老年代使用串行回收
新生代使用复制算法,老年代使用标记-压缩算法。
-XX:UserParNewGC
新生代并行,老年代串行。
Parallel收集器,串行收集器在新生代和老年代的并行化
新生代复制算法
老年代标记压缩算法
-XX:+UserParallelGC 使用Parallel收集器(新生代并行,老年代串行)
-XX:+UserParalleOldGC使用Parallel收集器(新生代并行,老年代并行)
-XX:MaxGCPauseMills最大停顿时间,单位毫秒。GC尽力保证回收时间不超过设定值
-XX:GCTimeRatio 0-100的取值范围,垃圾收集时间占总时间的比。默认99,即最大允许1%时间做GC
上面两个参数是矛盾的。因为停顿时间和吞吐量不可能同时调优。
CMS收集器 Concurrent Mark Sweep 并发标记清除,主要特点是和用户线程一起执行。上图是主要工作原理。因为和用户线程一起运行,不能再空间快man的时候在清理,-XX:CMSInitiatingOccupancyFraction设置出发GC的阈值,如果不幸内存预留空间不过,就会引起concurrent mode failure。
标记清除后内存不一定是连续的(因为是和用户线程是并发执行,如果移动用户内存地址,会因为用户线程找不到内存),标记压缩后内存是连续的。
三种内存溢出异常介绍
1. OutOfMemoryError: Java heap space 堆溢出
内存溢出主要存在问题就是出现在这个情况中。当在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
2. OutOfMemoryError: PermGen space 非堆溢出(永久保存区域溢出)
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。
3. OutOfMemoryError: unable to create new native thread. 无法创建新的线程
这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。
相关推荐
Java服务GC参数调优案例1 Java服务GC参数调优案例的标题“Java服务GC参数调优案例1”和描述“背景以及遇到的问题我们的Java HTTP服务属于OLTP类型,对成功率和响应时间的要求比较高,在生产环境中出现偶现的成功率...
本教程将深入探讨GC参数的学习,特别是针对G1垃圾收集器的系统配置。 一、垃圾收集器概述 Java虚拟机(JVM)中的垃圾收集器是内存管理的关键组成部分,它自动识别并清理不再被程序引用的对象。不同的JVM版本提供了...
在Java中,GC参数通常通过命令行选项传递给JVM,这些参数可以调整GC的行为,包括垃圾收集的频率、内存分配策略、新生代和老年代的比例等。 5. GC参数这一章节可能涵盖以下内容: 1. **GC的基本概念**:讲解GC的...
### 5GC参数设置问题导致UE无法接入 #### 背景与问题描述 在5G通信领域,尤其是在网络优化和通信工程建设项目中,参数配置的准确性至关重要。本文档记录了一个具体的案例,即5GC(5G Core)参数设置不当导致用户...
JDK9 GC调优是Java开发中至关重要的一个环节,涉及到JVM(Java虚拟机)的性能优化。...JDK9提供的GC参数PDF文档则为调优提供了极大的便利,它详尽地整理了所有相关参数,是进行JVM GC调优的重要参考资料。
Java虚拟机(JVM)是Java程序运行的基础,它的配置参数和垃圾收集(GC)机制对于优化应用程序性能至关重要。本文将深入探讨JVM参数及其与Java垃圾收集相关的知识。 一、JVM参数详解 JVM参数可以分为三类:启动参数...
1. **调整GC参数**:根据应用程序的特性和需求,调整垃圾收集器的参数,如新生代大小、老年代大小、并行线程数等。 2. **减少对象创建**:过多的短生命周期对象会增加GC负担,优化代码以减少不必要的对象创建。 3. *...
2. **实时监控**:用户可以实时观察到应用程序的内存分配、回收以及垃圾收集活动,这对于诊断性能问题和调整GC参数极为有用。 3. **详细统计**:GCViewer提供了一系列详细的统计信息,如垃圾收集时间、暂停时间、...
4. **自动化调优**:可能包含自动调优功能,能够根据应用负载自适应地调整GC参数。 5. **兼容性**:支持多种JVM版本,确保在不同环境下都能稳定工作。 6. **社区支持**:可能有一个活跃的开发者社区,提供问题解答、...
在Tomcat启动脚本中,可以通过设置以下环境变量来调整GC参数: ```sh CATALINA_OPTS='-Xms512m -Xmx4096m -XX:PermSize=64M -XX:MaxNewSize=128m -XX:MaxPermSize=64m -XX:ParallelGCThreads=8 -XX:+...
7. **GCPrintFlagsDiagnostic**:这是一个命令行工具,用于检查和修改JVM的GC参数。通过这个工具,开发者可以直接查看和调整与GC相关的配置。 8. **GC日志分析**:通过设置JVM参数,我们可以开启GC日志,然后使用第...
5. **GC参数调整**:通过JVM参数可以调整GC行为,如-Xms、-Xmx设置堆大小,-XX:NewRatio设置新生代与老年代比例,-XX:SurvivorRatio设置新生代两个区的比例,-XX:+UseConcMarkSweepGC选择特定GC算法等。 **JVM调优*...
基于cms的高并发低延时的gc参数,生产实战参数,各位看官烦请点赞
2. **GC暂停时间过长**:如果GC暂停时间频繁或过长,可能会影响应用的响应速度,需要调整GC参数来优化。 3. **线程死锁**:结合线程分析,找到死锁的线索,避免系统挂起。 总结来说,JVisualVM和VisualGC是Java...
在Java环境中,尤其是大型企业级应用如WAS中,正确配置GC参数至关重要,因为它直接影响到服务的响应时间、吞吐量以及系统的稳定性。gc日志提供了关于JVM内存使用情况的详细信息,包括对象的创建、存活和销毁过程。...
除了GC参数之外,还有一些其他的JVM参数可以帮助进一步优化性能: - `-XX:+PrintGCDetails`:打印详细的GC日志。 - `-XX:+PrintGCDateStamps`:打印GC发生的具体日期和时间。 - `-XX:+...
同时,分析结果也能帮助我们选择合适的垃圾收集器,如CMS、G1、ZGC或Shenandoah,以及调整相关的GC参数,以达到最优的性能表现。 在实际使用中,我们需要先在JVM启动时开启GC日志记录,例如在Java启动参数中添加`-...
2. **调整GC参数**:根据GC的运行情况,可以调整`-GOGC`环境变量,控制GC启动的时机,平衡程序性能和内存使用。 3. **优化分配策略**:如果发现大量小对象频繁分配导致GC压力增大,可以考虑使用池或者批量分配策略来...
为了优化Java应用的性能,理解并调整这些GC参数至关重要。不同的应用有不同的内存需求和性能目标,因此选择合适的垃圾收集策略和调整参数可以显著改善应用的响应速度、内存利用率和稳定性。例如,如果应用需要低延迟...