【Java 虚拟机原理】垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )

简介: 【Java 虚拟机原理】垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )

文章目录

一、Java VisualVM 工具安装 Visual GC 插件

二、使用 Java VisualVM 分析 GC 内存





一、Java VisualVM 工具安装 Visual GC 插件


使用


jvisualvm


命令 , 打开 Java VisualVM 工具 ,


image.png


在弹出的 " 插件 " 对话框中 , 选择安装 " Visual GC " 插件 ,

image.png



点击 " 安装 " 按钮 , 弹出如下界面 , 点击 " 下一步 " 按钮 , 继续向后执行 ;

image.png



选择 " 我接受所有许可证协议中的条款(A) " 选项 , 点击 " 安装 " 按钮 ;

image.png



之后会很快安装完毕 , 插件安装完毕后 , 如下显示 , 点击 " 完成 " 按钮 , Visual GC 插件 安装完成 ;

image.png



在 Java VisualVM 工具 中 , 点击 IntelliJ IDEA 查看该进程的 GC 情况 , 选择 Visual GC 选项卡 , 即可查看内存细节 , 如 : 元空间 Metaspace , 老年代 Old Gen , 年轻代中的 Eden Space 区域 , Survivor 0 / 1 区域 ;



image.png





二、使用 Java VisualVM 分析 GC 内存


分析 GC 时间 与 Eden Space 区域 内存占用 , 每次 GC 时 , Eden Space 区域 内存使用就变小 , 将其中的对象都丢到了 Survivor 0 或 Survivor 1 区域中 ;


image.png


分析 GC 时间 与 Survivor 0 和 Survivor 1 区域的内存使用情况 , 每次 GC 时 , 清空一个区域 , 将数据都拷贝到另一个区域 , 这是垃圾回收算法中的 复制算法 ;

image.png



每次 GC 垃圾回收 , 对象的 分代年龄 都会 +1 , 当分代年龄到达一定数量 , 该对象就被判定为永生对象 , 同时将永生对象放到 老年区 , 老年区的内存也是缓慢增加 ;

image.png



一旦这几个内存区域全部装满 , 就会出现 OOM 异常 ; 左侧的 Old Gen 是老年代 , 右侧的 Eden + Survivor 0 + Survivor 1 是年轻代区域 ;


image.png



在 年轻代 内存 中 , minor GC 垃圾回收非常频繁 , 每次都要针对年轻代中的 对象 进行 GC Root 可达性分析 , 如果不可达 , 直接回收 , 如果可达 , 分代年龄 + 1 , 分代年龄到达 15 后 转入 老年代 ;


在 老年代 内存 中 , full GC 垃圾回收 , 不是很频繁 , 每次对 永生对象 进行 GC Root 可达性分析 , 不可达的对象直接回收 ;


如果一次创建一个大对象 , 则直接放入老年代中 , 因为大对象需要大块内存 , 在年轻代中 , 不适合操作大块内存 , 有很多内存碎片 ;


如果 年轻代 , 老年代 , 内存区域用完 , 新对象 创建后没有足够的内存存放 , 则出现 OOM ;


目录
相关文章
|
存储 弹性计算 缓存
阿里云服务器ECS经济型、通用算力、计算型、通用和内存型选购指南及使用场景分析
本文详细解析阿里云ECS服务器的经济型、通用算力型、计算型、通用型和内存型实例的区别及适用场景,涵盖性能特点、配置比例与实际应用,助你根据业务需求精准选型,提升资源利用率并降低成本。
908 3
|
设计模式 缓存 Java
【JUC】(4)从JMM内存模型的角度来分析CAS并发性问题
本篇文章将从JMM内存模型的角度来分析CAS并发性问题; 内容包含:介绍JMM、CAS、balking犹豫模式、二次检查锁、指令重排问题
343 1
|
存储 人工智能 自然语言处理
AI代理内存消耗过大?9种优化策略对比分析
在AI代理系统中,多代理协作虽能提升整体准确性,但真正决定性能的关键因素之一是**内存管理**。随着对话深度和长度的增加,内存消耗呈指数级增长,主要源于历史上下文、工具调用记录、数据库查询结果等组件的持续积累。本文深入探讨了从基础到高级的九种内存优化技术,涵盖顺序存储、滑动窗口、摘要型内存、基于检索的系统、内存增强变换器、分层优化、图形化记忆网络、压缩整合策略以及类操作系统内存管理。通过统一框架下的代码实现与性能评估,分析了每种技术的适用场景与局限性,为构建高效、可扩展的AI代理系统提供了系统性的优化路径和技术参考。
1053 4
AI代理内存消耗过大?9种优化策略对比分析
|
Oracle Java 关系型数据库
JVM深入原理(一+二):JVM概述和JVM功能
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行。
432 0
|
Arthas 存储 Java
JVM深入原理(三+四):JVM组成和JVM字节码文件
目录3. JVM组成3.1. 组成-运行时数据区3.2. 组成-类加载器3.3. 组成-执行引擎3.4. 组成-本地接口4. JVM字节码文件4.1. 字节码文件-组成4.1.1. 组成-基础信息4.1.1.1. 基础信息-魔数4.1.1.2. 基础信息-主副版本号4.1.2. 组成-常量池4.1.3. 组成-方法4.1.3.1. 方法-工作流程4.1.4. 组成-字段4.1.5. 组成-属性4.2. 字节码文件-查看工具4.2.1. javap4.2.2. jclasslib4.2.3. 阿里Arthas
307 0
|
存储 安全 Java
JVM深入原理(五):JVM组成和JVM字节码文件
类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析。
275 0
|
Arthas Java 测试技术
JVM深入原理(六)(一):JVM类加载器
目录6. JVM类加载器6.1. 类加载器-概述6.2. 类加载器-执行流程6.3. 类加载器-分类(JDK8)6.3.1. JVM底层实现的类加载器6.3.1.1. 启动类加载器6.3.2. Java代码实现类的加载器6.3.2.1. 扩展类加载器6.3.2.2. 应用程序类加载器6.4. 类加载器-Arthas查看类加载器
327 0
|
Java 关系型数据库 MySQL
JVM深入原理(六)(二):双亲委派机制
自定义类加载器打破双亲委派机制的方法:复写ClassLoader中的loadClass方法常见问题:要加载的类名如果是以java.开头,则会抛出安全性异常加载自定义的类都会有一个共同的父类Object,需要在代码中交由父类加载器去加载自定义类加载器不手动指定parent会默认指定应用类加载两个自定义类加载器加载同一个类会被认为是两个对象,只有相同的类加载器+想通的类限定名才会被认为是一个对象。
535 0
|
存储 安全 Java
JVM深入原理(七)(一):运行时数据区
栈的介绍:Java虚拟机栈采用栈的数据结构来管理方法调用中的基本数据,先进后出,每一个方法的调用使用一个栈帧来保存栈的组成:栈:一个线程运行所需要的内存空间,一个栈由多个栈帧组成栈帧:一个方法运行所需要的内存空间活动栈帧:一个线程中只能有一个活动栈帧栈的生命周期:栈随着线程的创建而创建,而回收会在线程销毁时进行栈的执行流程:栈帧压入栈内执行方法执行完毕释放内存若方法间存在调用,那么会压入被调用方法入栈,执行完后释放内存,再执行当前方法,直到执行完毕,释放所有内存。
368 0
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3886 0