【Java 虚拟机原理】垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )
文章目录
一、Java VisualVM 工具安装 Visual GC 插件
使用
jvisualvm
命令 , 打开 Java VisualVM 工具 ,
在弹出的 " 插件 " 对话框中 , 选择安装 " Visual GC " 插件 ,
点击 " 安装 " 按钮 , 弹出如下界面 , 点击 " 下一步 " 按钮 , 继续向后执行 ;
选择 " 我接受所有许可证协议中的条款(A) " 选项 , 点击 " 安装 " 按钮 ;
之后会很快安装完毕 , 插件安装完毕后 , 如下显示 , 点击 " 完成 " 按钮 , Visual GC 插件 安装完成 ;
在 Java VisualVM 工具 中 , 点击 IntelliJ IDEA 查看该进程的 GC 情况 , 选择 Visual GC 选项卡 , 即可查看内存细节 , 如 : 元空间 Metaspace , 老年代 Old Gen , 年轻代中的 Eden Space 区域 , Survivor 0 / 1 区域 ;
二、使用 Java VisualVM 分析 GC 内存
分析 GC 时间 与 Eden Space 区域 内存占用 , 每次 GC 时 , Eden Space 区域 内存使用就变小 , 将其中的对象都丢到了 Survivor 0 或 Survivor 1 区域中 ;
分析 GC 时间 与 Survivor 0 和 Survivor 1 区域的内存使用情况 , 每次 GC 时 , 清空一个区域 , 将数据都拷贝到另一个区域 , 这是垃圾回收算法中的 复制算法 ;
每次 GC 垃圾回收 , 对象的 分代年龄 都会 +1 , 当分代年龄到达一定数量 , 该对象就被判定为永生对象 , 同时将永生对象放到 老年区 , 老年区的内存也是缓慢增加 ;
一旦这几个内存区域全部装满 , 就会出现 OOM 异常 ; 左侧的 Old Gen 是老年代 , 右侧的 Eden + Survivor 0 + Survivor 1 是年轻代区域 ;
在 年轻代 内存 中 , minor GC 垃圾回收非常频繁 , 每次都要针对年轻代中的 对象 进行 GC Root 可达性分析 , 如果不可达 , 直接回收 , 如果可达 , 分代年龄 + 1 , 分代年龄到达 15 后 转入 老年代 ;
在 老年代 内存 中 , full GC 垃圾回收 , 不是很频繁 , 每次对 永生对象 进行 GC Root 可达性分析 , 不可达的对象直接回收 ;
如果一次创建一个大对象 , 则直接放入老年代中 , 因为大对象需要大块内存 , 在年轻代中 , 不适合操作大块内存 , 有很多内存碎片 ;
如果 年轻代 , 老年代 , 内存区域用完 , 新对象 创建后没有足够的内存存放 , 则出现 OOM ;
相关文章
- 二级java程序设计--Java SDK6.0的下载和操作[通俗易懂]
- Linux 配置Java环境(图文详细)
- java单例模式——详解JAVA单例模式及8种实现方式
- java启动器_JAVA基础:Java 启动器如何查找类
- java游戏开发入门教程_JAVA制作游戏入门教程
- java中数组怎么定义_java中数组的定义
- java ee简介_Java EE 简介
- java 堆栈的声明_Java 堆栈[通俗易懂]
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java实现手机短信验证全过程[通俗易懂]
- JAVA连接池
- 工具包 java-dataloader 异步批处理装载数据
- java 构造器 构造方法_Java构造器(构造方法/constructor)
- java softreference_Java引用总结–StrongReference、SoftReference、WeakReference、PhantomReference…[通俗易懂]
- java三元运算符怎么用_按位运算符
- java 测试程序代码运行时间过长_Java测试
- web大文件上传解决方案_java上传文件到服务器
- java如何打印菱形_JAVA输出菱形
- java 常量表达式,需要常量表达式? (Java switch语句)[通俗易懂]
- 使用java.awt.Graphics2D画矩形详解编程语言
- Java学习笔记之九java二维数组及其多维数组的内存应用拓展延伸详解编程语言
- 深入理解Java之jvm启动流程详解编程语言
- Java关闭Socket来终止线程详解编程语言
- 解决Java程序连接MySQL数据库的方法(java链接mysql数据库)
- 策略Java中Redis实现过期时间策略(redisjava过期)
- 服务器快速搭建Linux Java服务器,实现互联网应用(linux搭建java)
- 机制Redis Java: 有效期管理机制(redisjava过期)
- 使用Java连接SQL Server数据库,轻松实现数据交互(java连sqlserver)
- Oracle中实现Java程序设计的极限可能性(oracle中的java)
- Java反射之私有字段和方法详细介绍
- java实现无符号数转换、字符串补齐、md5、uuid、随机数示例
- java使用smartupload组件实现文件上传的方法