众所周知,GC主要回收的是堆内存,堆内存中包含年轻代和老年代,年轻代分为Eden和Surivor,如下图所示。我们用案例分析下堆的GC信息【版本: HotSpot JDK1.8】。
案例很简单,for循环运行5次,每次在Eden申请1M空间,假设我们分配堆内存空间是20m,并打印GC详细信息,配置过程: -XX:+PrintGCDetails -Xmx20m。
- -XX:+PrintGCDetails:打印GC详细信息。
- -Xmx20m:分配最大堆内存空间是20m。
GC详细分析
运行程序,IDEA控制台打印结果如下:
- -Xms 初始堆大小,不够时,会自动扩展,所以一般 Xms空间和 Xmx最大堆空间 *设置成一样的。
上面程序不变,设置JVM参数, -XX:+PrintGCDetails -Xmx20m -Xms5m,运行程序,部分结果如下图所示。
如上图所示:初始化堆大小是5M,新生代内存一共发生了4次GC,从上图可以分析,Eden只有1M多内存可以被申请,所以第二次for循环申请1M空间就触发了GC,数据就被丢进老年代,连续3次后,GC堆的空间由5M变为了6M,说明初始化堆空间不够使,可以自动扩展堆内存。
当然我们还可以通过 -Xmn 设置年轻代大小。下面我们看看年轻代中,Eden和from/to区域怎么划分。
上面程序不变,设置JVM参数, -XX:+PrintGCDetails -Xmx20m -Xmn10m -XX:SurvivorRatio=2 ,运行程序,部分结果如下图所示。
相关文章
JavaFX 集成 Sqlite 和 Hibernate 开发爬虫应用
目录 [隐藏] 0.1 前言: 0.2 界面 0.3 Maven 环境 0.4 项目结构 0.5 整合 Hibernate 0.5.1 SQLiteDialect.java 数据库方言代码 0.5.2...
SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制
一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce...
JavaSE-分页工具方法
借用mybatisPlus的分页对象,可以自己创建一个 此方法针对集合设置分页,与SQL无关。 ``` /* * * @param pageNo 第几页 * ...
Markdown语法
本地编辑器的选择 1. 推荐文本编辑器:Typora 2. Typora编辑器的下载和安装 编辑器下载地址 安装步骤如下: 下载之后,双击打开,一直点击下一步则可安装好。 Markdown的语法 标题...
Java学习 (16) Java方法篇(03)递归
递归 语法实例 递归与循环的区别 递归优缺点 循环优缺点 递归 递归就是就是自己调用自己 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的...
SpringCloud微服务实战——搭建企业级开发框架(三十三):整合Skywalking实现链路追踪
Skywalking是由国内开源爱好者吴晟(原OneAPM工程师)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。是一款基于分布式...
20 HTTP 长连接与短连接
纸上得来终觉浅,绝知此事要躬行。 Never give up until the fight is over. 永远不要放弃,要一直战斗到最后一秒。 长连接 指在一个TCP连接上可以连续发送多个数据包...
feignclient各种使用技巧说明
常规的FeignClient的创建与使用我相信只要使用过spring cloud全家桶的套件的基本上都是非常熟悉了,我们只需定义一个interface,然后定义相关的远程接口方法签名及在方法上标记相关...
Java学习 (25) 对象篇(05)抽象类&接口
抽象类 - 语法实例 注意点 具体讲解视频(狂神说Java) 接口 - 语法实例 具体讲解视频(狂神说Java) 抽象类 abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就...
最近有个朋友的需求,用油猴写了一个插件,可以看五学教育(wuxuejiaoyu.cn)的网课
湖南环境生物职业技术学院 ,就是以前的湖南生物机电学校,成人高考需要看网课,问我有没有办法.我写了一个油猴插件,一天时间差不多把网课和考试都搞完了.....油猴还真的不错, 后台使用python fl...
JavaSE_多线程入门 线程安全 死锁 状态 通讯 线程池
对JavaSE_多线程入门 线程安全 死锁 状态 通讯 线程池进行简要总结 1 多线程入门 1.1 多线程相关的概念 并发与并行 并行:在同一时刻,有多个任务在多个CPU上同时执行。 并发:在同一时刻...
Java基础常见知识&面试题总结(上)
Java基础常见知识&面试题总结(上) 1. 基础概念与常识 1.1 Java 语言有哪些特点? 简单易学; 面向对象(封装,继承,多态); 平台无关性( Java 虚拟机实现平台无关性); ...
JavaSE-对象所有字段判空
```java /* * 判断该对象是否所有属性为空 * 返回ture表示所有属性为null,返回false表示不是所有属性都是null / public static boolean isAllFi...
Spring Bean生命周期
本文基于图灵课堂周瑜老师的讲解整理,包括spring bean加载的过程,主要是扫描BeanDefinition以及初始化非懒加载单例Bean两部分,源码取自SpringFramework 5.3.2...