本文代码在测试时使用的垃圾收集器组合是Serial/Serial Old。
这里还需要介绍一些JVM的基本参数,本文中进行如下设置:
-verbose gc 打印垃圾收集信息
-Xms20M 堆容量设置为20MB
-Xmx20M 堆容量最大值设置为20MB
-Xmn10M 新生代容量设置为10MB(老年代20-10=10MB)
-XX:SurvivorRatio=8(新生代Eden和Survivor的大小比例为8:1:1)
-XX:+PrintGCDetails 打印GC详情
-XX:+UseSerialGC 使用Serial+SerialOld垃圾收集器组合

大多数情况下对象在新生代的Eden区分配,当Eden区没有足够的空间时,虚拟机将发起一次Minor GC。

public class CmsTest {public static void main(String[] args) {int size=1024*1024;byte[] myAlloc1=new byte[2*size];byte[] myAlloc2=new byte[2*size];byte[] myAlloc3=new byte[2*size];byte[] myAlloc4=new byte[4*size];}
}

在以上代码中,尝试分配3个2MB大小和1个4MB大小的对象,根据GC信息可得出:分配myAlloc4时发生了MinorGC,新生代 DefNew: 7127K->519K,但是总内存空间几乎没有减少7127K->6663K(因为myAlloc1,myAlloc2,myAlloc3三个对象都是存活的)。发生这次GC的原因是给myAlloc4分配内存时,Eden已被前三个对象占用6MB,剩余容量不足以分配4MB内存(虽然一共10MB,但还会被其他系统默认东西占用小部分内存),因此发生了MinorGC。GC期间发现已有的3个2MB大小的对象无法全部放入Survivor空间中(Survivor只有1MB空间),所以根据分配担保机制提前转移到老年代。
因此这次GC结束后,myAlloc4分配到了新生代Eden中,结果是Eden占用4MB,老年代被占用6MB(被myAlloc1-3三个对象占用)。

JVM的内存分配与回收策略实战——对象优先在Eden分配相关推荐

  1. JVM--基础--09--内存分配策略--对象优先在Eden分配

    JVM–基础–09–内存分配策略–对象优先在Eden分配 1.测试 1.1.代码 /*** * @描述:对象优先在Eden分配* @author feiZhou* @date 2018年11月21日上 ...

  2. 白话 垃圾回收之对象优先在Eden分配

    借用了这里的一张图,如侵权请联系删除. 这次实战是<深入理解Java虚拟机> P92 的例题,这里分析加强记忆. 参数 新生代:Parallel Scavenge收集器 老年代:ParOl ...

  3. 《深入理解java虚拟机v3》对象优先在Eden分配 > 代码单3-7 新生代Minor GC

    对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配.当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. HotSpot虚拟机提供了-XX:+PrintGCDetai ...

  4. 深入JVM 对象优先在Eden分配

    前言:对象的内存分配,大方向讲,指的是对象在堆上分配,对象的主要分配发生在新生代的Eden区,当然少数分配在老年代,分配的规则并不是固定不变的,细节取决于具体的虚拟机实现. --对象优先在Eden区分 ...

  5. 【JVM】8_对象优先在Eden分配

    /*** VM参数有这些:* -verbose:gc : 表示输出虚拟机中GC的详细情况,输出像: [Full GC 168K->97K(1984K), 0.0253873 secs]* -Xm ...

  6. JVM:内存分配与回收策略?Full GC 的触发条件?StopTheWorld ?

    内存分配与回收策略 Minor GC 和 Full GC Minor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快. Full GC: ...

  7. JVM学习笔记-GC日志分析(对象优先在Eden区分配)

    前言 在进行GC日志分析前,先了解一下JVM虚拟机运行时数据区的主要划分: Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域 有各自的用途,以及创建和销毁 ...

  8. 实战:内存分配与回收策略

    实战:内存分配与回收策略 ​ Java技术体系的自动内存管理,最核心的目标就是自动化的解决两个问题:内存分配和内存回收,在之前我们讲的都是内存回收,现在我们来看一下内存分配的细节,这里我是使用JDK1 ...

  9. JVM3:实战:内存分配与回收策略

    实战:内存分配与回收策略 文章目录 实战:内存分配与回收策略 对象优先在Eden分配 大对象直接进入老年代 长期存活的对象将进入老年代 动态对象年龄判定 空间分配担保 对象优先在Eden分配 试分配三 ...

最新文章

  1. iOS经典讲解之获取沙盒文件路径写入和读取简单对象
  2. java post xmll_HttpClient发送Post请求,内容格式为xml,并获取响应内容
  3. nginx 安装 和 配置
  4. R语言ggplot2可视化将图像标题(title)居中显示实战
  5. Gradle 使用指南 -- 基础配置
  6. real time AI based system questionaires
  7. C#操作Excel总结
  8. js基础中Null、undefined、NaN、false、0、{}的理解及使用
  9. Python测试开发django1.简介
  10. 肝火旺的人,哪些食物打死都不要碰?
  11. c++ 读取hdmi输入信号_小白需要知道HDMI知识
  12. StreamSets实战之路(十五)-实战篇- 数据采集与处理
  13. Functional Programming
  14. Android studio断点调试源码
  15. photoshop中的快速选择工具
  16. vue中prop的用法
  17. 支持Micro USB安卓接口与iphone 8手机的5W无线充电芯片|无线快充芯片小封装SOP8外围简单精简
  18. 拼图游戏java(三)实现鼠标点击图片上下左右移动
  19. C#windows竞赛管理系统
  20. 算法导论第三版习题6.4

热门文章

  1. 【C语言】实现字符串逆序输出(包含空格的字符串)
  2. 计算机键盘光标上下键失灵,输入时使用键盘上下键实现光标上下移动功能
  3. 主页面搭建--简单理解步骤4
  4. Markdown快速实现复杂表格方法
  5. node.js 系列——Buffer
  6. 关于FlowPlayer视频播放问题
  7. java字符集与字符编码 Unicode字符集
  8. intellij idea 创建动态web项目
  9. 活动报名丨IDEA研究院 杨平:统一自然语言理解任务为多项式选择任务
  10. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第51讲:PHP中smarty模板技术介绍