Java垃圾回收_过程观察
2024-09-05 14:57:46
这是今天看JVM垃圾回收的时候做的实验观察。
- 使用工具:Java VisualVM、VisualVM GC插件
- 观察应用:Tomcat容器中的Web服务
1. Java VisualVM
在tomcat服务启动过程中,内存展示的“锯齿”模式(如图1所示),表示对象被分配到“伊甸园(Eden区)”中,然执行“年轻代垃圾收集”;每次年轻代收集之后,被占用的内存量回落到基线水平。
图1
在Tomcat服务运行过程中,堆内存表现为“使用内存”逐渐增长,到达最大值(接近)时,会进行垃圾收集(如图2所示),然后堆内存使用回到基线水准。基线水平(蓝色)是终身制对象和幸存者对象合起来的用量。如果基线水准保持平稳或者逐渐下行,则说明内存使用良好;如果基线水平上升,未必是程序中有错误,也可能是有些对象的生命周期长,足够进入Old区。
图2
2. VisualVM GC
通过观察Tomcat应用服务的运行,可以看到Eden(伊甸园)中的空间逐渐不够用,然后经历一次年轻代收集:年轻代收集过后,伊甸园空间和收集前的s0中(如图3所示)的对象被回收;在上述两个空间中幸存下来的对象存放在s1中,如图4所示。
图3
执行过一次年轻代回收之后的结果如下所示:
图4
3. 补充概念
- 年轻代收集:针对Eden和幸存者区域中的对象执行“标记&清除”算法,会有一部分没有被清除的对象,遗留下来存放到另一个幸存者区域中;
- 何时将对象放入Old区域:(1)经过多次(达到阈值)都幸存下来的对象,则进入Old区域;(2)年轻代回收的时候发现幸存者区域满了。
参考资料
最新文章
- hdu 3401 单调队列优化DP
- hdu4990 矩阵
- svn更改默认服务启动目录
- JSP页面编码问题
- java笔试练习题
- C# random(number)
- ListView在异步加载动态图片时,往往最后一项或几项被遮盖(IM场景居多)
- NSScanner扫描字符串中()的内容
- JavaScript系列----面向对象的JavaScript(1)
- python 最基本的的单例模型的实现及应用
- 免费了 -- EXCEL插件 智表ZCELL 普及版V1.0 发布了!!!
- springboot连接数据库报错testWhileIdle is true, validationQuery not set
- perl代码调试
- 问题 B: 【例9.3】求最长不下降序列(基础dp)
- 消息中间件的意义和应用场景 (activeMq)
- TED_Topic5:How virtual reality can create the ultimate empathy machine
- pxe基于虚拟机的自启动
- #应用openxml读写excel代码
- Java [Leetcode 357]Count Numbers with Unique Digits
- 转载《学习HTML5 canvas遇到的问题》
热门文章
- 【oracle】定时任务
- 学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery
- ant design pro如何实现分步表单时,返回上一步值依然被保存
- Python面向对象 | 抽象类和接口类
- [RN] 解决小米手机安装应用报:INSTALL_FAILED_USER_RESTRICTED问题
- 以py脚本形式ORM操作 及 django终端打印sql语句的设置
- java登录图形界面
- Spring Boot 知识笔记(配置文件)
- PyTorch学习之六个学习率调整策略
- 阿里云 azkaban 发邮件的坑