首页 > 其他分享 >JVM_FullGC&YoungGC

JVM_FullGC&YoungGC

时间:2024-04-28 14:23:25浏览次数:21  
标签:Full Java 回收 FullGC GC 内存 JVM YoungGC

概念

JVM是Java Virtual Machine(Java虚拟机)的缩写;
JVM 中的 GC(Garbage Collection)是垃圾回收的缩写,是 JVM 的内存管理机制。
Young GC 和 Full GC 是两种不同的 GC 算法。

当新生代内存不够用时,Young GC 会发生,本质上 Young GC 可以理解成 jvm 正常的扫垃圾过程;所以,YoungGC的出现是属于正常情况,

Full GC, 即全垃圾回收,是一种垃圾回收的过程 , 它会暂停所有的应用程序线程,对整个堆进行回收。 FullGC的出现,就叫事故了,这种对业务影响很大的。
Full GC 是 Full Garbage Collection 的缩写,是指把整个堆内存扫描一遍,回收不再使用的对象并且整理内存的过程。由于堆内存的整体回收过程非常慢,因此,Full GC 可能导致应用程序的暂停。
Full Gc 本质上就是,垃圾太多,正常的活儿干不了了,内存空间不够了,得停下所有的事情,来一次大扫除

要避免 Full GC 发生,需要运维调整堆内存大小:确定合适的堆内存大小是避免 Full GC 发生的关键。以及减少数据对象的生命周期:尽可能地缩短对象的存活时间。

 

什么情况下会发生Full GC?

Full GC 它会清理整个堆内存,包括新生代和老年代。Full GC通常发生在以下情况下:

  1. 老年代空间不足: 当老年代无法容纳新生代晋升过来的对象时,可能触发Major GC。这通常发生在年轻代的Minor GC后,存活的对象被移动到老年代,导致老年代的空间不足。
  2. 永久代空间不足: 在Java 7及之前的版本中,常量池等信息存放在永久代中。如果常量池或类的元数据占用的空间过大,可能导致永久代空间不足,触发Full GC。在Java 8及之后的版本中,永久代被元空间(Metaspace)取代。
  3. 使用CMS(Concurrent Mark-Sweep)垃圾回收器时的并发失败: CMS是一种以减少应用程序停顿时间为目标的垃圾回收器,但它可能会因为一些原因(比如老年代空间不足)而导致并发失败,从而触发Full GC。
  4. System.gc()的显式调用: 调用System.gc()Runtime.getRuntime().gc()并不能确保会立即进行垃圾回收,但它可能会触发Full GC。
  5. 永久代/Metaspace溢出: 如果Metaspace(Java 8及以后的版本)或永久代(Java 7及之前的版本)中的元数据信息溢出,可能触发Full GC。
  6. 分配担保失败: 在进行Minor GC时,虚拟机会检查老年代的剩余空间是否大于新生代的对象总大小。如果不大于,会尝试进行一次Full GC。这是为了确保在新生代GC后,存活的对象能够顺利晋升到老年代。
  7. G1垃圾回收器的一些特殊情况: G1垃圾回收器在一些特殊情况下可能触发Full GC,例如在进行Mixed GC(混合收集)时,或者由于空间不足而放弃Mixed GC,转而执行Full GC。

ARMS监控JVM

阿里云的ARMS(应用实时监控服务)提供了对JVM(Java虚拟机)的监控功能,允许用户实时查看JVM的运行状态和相关指标。以下是如何使用ARMS监控JVM的步骤:

  1. 登录ARMS控制台。
  2. 在左侧导航栏选择应用监控 > 应用列表,并在顶部菜单栏选择目标地域。
  3. 在应用列表页面单击接入应用,并选择目标应用。
  4. 在应用详情页面选择想要查看的实例,并在页面右侧单击JVM监控页签。

在JVM监控页签内,你可以查看以下JVM监控指标:

  • GC瞬时次数和GC瞬时耗时:这反映了垃圾回收的次数和耗时,有助于了解垃圾回收对应用性能的影响。
  • 堆内存详情:包括已使用、已提交和最大堆内存的大小,反映了Java应用的内存使用情况。
  • 元空间详情:用于存放类的元数据,包括类的结构信息、方法信息、字段信息等,这一部分的内存占用一般比较稳定。
  • 非堆内存:ARMS展示的非堆内存包括元空间(Meta Space)、压缩类空间(Compressed Class Space)和代码缓冲区(Code Cache)三个区域的总和。这反映了JVM中非堆内存的使用情况。
  • 直接缓冲区:用于NIO操作的内存区域。
  • JVM线程数:当前JVM的线程数量。

你可以通过单击各个监控面板上的指标名称,打开或关闭该指标在图表中的可见性。另外,你还可以单击“查看API”按钮,查看该监控指标的API详情。

请注意,为了使用ARMS的JVM监控功能,你可能需要先将你的Java应用接入ARMS。具体的接入步骤可能包括下载并安装Agent,然后在应用中配置相应的参数。详细的接入步骤和配置方法,你可以参考阿里云的官方文档或相关教程。

通过ARMS的JVM监控功能,你可以实时了解Java应用的内存使用情况和性能表现,从而及时发现并解决问题,提升应用的稳定性和性能。

标签:Full,Java,回收,FullGC,GC,内存,JVM,YoungGC
From: https://www.cnblogs.com/xiaodi888/p/18163652

相关文章

  • JVM 内存溢出、泄漏与引用
    1、引用概述在栈上的reference类型存储的数据代表某块内存地址,称reference为某内存、某对象的引用。实际上引用分为很多种,从强到弱分为:强引用>软引用>弱引用>虚引用。平常我们使用的引用实际上是强引用,各种引用有自己的特点,强引用就是Java中普通的对象,而软引用、弱引用......
  • 揭露 FileSystem 引起的线上 JVM 内存溢出问题
    作者:来自vivo互联网大数据团队-YeJidong本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。内存泄漏定义(memoryleak):一个不再被程序使用的对象或变量还在内存中占有存储空间,JVM不能正常回收改对象或者变量。一次内存泄漏似乎不会有大......
  • Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)【转】
    Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置。首先是对这几个参数的含义要有深刻而清楚的理解。以tomcat8.5为例,讲解参数。同时也得认识到一点,tomcat调优也受制于linux内核。linux内核对tcp连接也有几个参数可以调优。因此我们可以将tomcat调优分为linux内核......
  • pyhanlp报FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/jvm'
    问题描述这个报出在我的虚拟机里面没有找到jdk;那我们就下载一个jdk进去,然后配置好环境变量:安装教程网址:传送门问题解决下载好之后:直接运行的话,发现还是这个错误,因为他默认到了一个路径,我们只需要把路径更改到我们本地即可,将下面这行代码放到调用pyhanlp之前:importosos.e......
  • JVM-part1-类加载子系统组成,及流程
    类加载子系统的作用:将所需要的Class文件进行加载,加载流程存在一下几个阶段:第一个阶段为加载阶段(Loading阶段):这个阶段是将引导类加载器和非引导类加载器需要加载的Class文件进行加载。具体来说:引导类加载器(BootStrapClassLoader):这个加载器的作用是将java_home/jre/lib下的Cl......
  • GraalVM-云原生时代的JVM(Java)
    一、GraalVM是什么?GraalVM是Oracle开源的一款通用虚拟机产品,官方称之为UniversalGraalVM,是新一代的通用多语言高性能虚拟机。它可以运行多种编程语言,如Java、JavaScript、Python等,并提供了即时编译(JIT)和AOT编译(AOT)的支持。GraalVM还支持在不同语言之间互相调用,以及嵌入到其他......
  • JVM——面试
    https://juejin.cn/post/6998527815964426271https://juejin.cn/post/7101120209540349959垃圾回收器Serial(新生代)+SerialOld(老年代)特点:单线程垃圾回收器,垃圾回收过程中需要STW,适用于运行在Client模式下的虚拟机;新生代标记复制算法,老年代标记整理算法。ParNew(新......
  • JVM学习笔记
    1.运行时数据区1.2运行时数据区及线程概述JVM将内存划分为俩种类型的数据区域线程共享:JVM启动时创建,退出时才销毁线程私有:线程创建时创建,线程退出时销毁1.2.1运行时数据区JVM内存布局规定了Java运行过程中内存申请,分配,管理的策略,保证高效运行。不同JVM在内存划分和管理......
  • JVM性能优化 —— 类加载器,手动实现类的热加载
    一、类加载的机制的层次结构每个编写的”.java”拓展名类文件都存储着需要执行的程序逻辑,这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件,”.class”文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的”.class”文件,并创建对应的cl......
  • 【异常】FATAL ERROR in native method: JDWP loaded classes, jvmtiError=JVMTI_ERRO
    一、异常内容IDEA启动微服务之后,提示FATALERRORinnativemethod:JDWPloadedclasses,jvmtiError=JVMTI_ERROR_OUT_OF_MEMORY(110)FATALERRORinnativemethod:JDWPloadedclasses,jvmtiError=JVMTI_ERROR_OUT_OF_MEMORY(110) atsun.misc.Unsafe.defineAnonym......