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

——对象优先在Eden区分配

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

虚拟机提供 -XX:PrintGCDetails这个收集器日志参数,告诉虚拟机在发生GC行为时打印内存回收日志,并且在进程退出时候输出当前运行时内存各区域的分配情况。

案例演示:

主方法中,尝试分配3个2MB大小和1个4MB大小的对象,

通过-Xms20M -Xmx20M -Xmn10M 这3个参数限制了Java堆的大小为20MB,不可拓展,其中10MB分配给新生代,剩下10MB分配给老年代。

通过-XX:SurvivorRatio=8决定新生代中Eden区与一个Survivor区间大小比为8:1

public class testAllocation {private static final int _1MB=1024*1024;/** VM启动参数* * -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8* * * */public static void main(String[] args) {// TODO 自动生成的方法存根byte[] allocation1,allocation2,allocation3,allocation4;allocation1=new byte[2*_1MB];allocation2=new byte[2*_1MB];allocation3=new byte[2*_1MB];allocation4=new byte[4*_1MB]; //将出现Minor GC}}

打印的GC日志:

可以看到前面3个大小为2MB的对象分配在Eden区内 但最后一个4MB对象无法分配在Eden区,而选择分配在ParOldGen

也就是老年代     将对象4分配取消

//allocation4=new byte[4*_1MB]; //将出现Minor GC

结果:

发现Eden区空间充足,所有3个对象全在Eden区内分配 

由此可见 虚拟机在普通对象分配时,优先在新生代Eden区分配,当空间不足时会在老年代分配

深入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分配

    本文代码在测试时使用的垃圾收集器组合是Serial/Serial Old. 这里还需要介绍一些JVM的基本参数,本文中进行如下设置: -verbose gc 打印垃圾收集信息 -Xms20M 堆容量设 ...

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

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

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

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

  7. jvm深入理解:内存分配与回收策略(优先在Eden分配、大对象直接进入老年代、长期存活的对象将进入老年代、动态对象年龄判定、空间分配担保)

    出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存. 象的内存分配,从 ...

  8. JVM——对象创建与内存分配机制

    文章目录 1.对象的创建 1.1.类加载检查 1.2.分配内存 1.3.初始化 1.4.设置对象头 1.5.执行方法 2.对象内存分配 2.1. 对象栈上分配 2.2.对象在Eden区分配 2.3.大 ...

  9. 32g内存 java开发,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧...

    内存分配机制 逐步分析 类加载检查: 虚拟机遇到一条new指令(new关键字.对象的克隆.对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否应被 ...

最新文章

  1. matlab数值计算好处,第四章 MATLAB 的数值计算功能(一)
  2. DeepMind将博弈论融入多智能体研究,让纳什均衡变得更简单
  3. 算法 | 尺度不变特征变换匹配算法 Scale Invariant Feature Transform (SIFT)
  4. 工作62:显示省略号
  5. 电脑有回声_电脑连接麦克风有回音怎么办?麦克风回声的解决方法
  6. 统一沟通-技巧-7-Lync 2010-配置信息-EWS未部署
  7. 默纳克系统服务器看平衡系数,默纳克启动停车舒适感调整
  8. Flutter之路由系列之Navigator简析
  9. JAVA JSP图书管理图书系统 servlet图书管理系统实现简单的图书管理系统源码
  10. WhereHows 安装
  11. delphi oracle 三层,delphi+Oracle做的三层结构的干部管理系统
  12. [转]应该被记住的天才,写在图灵诞辰100周年
  13. Halcon|通过旋转前后3维坐标点求旋转轴及旋转角度
  14. 前端 | 表格(table)的合并
  15. 前端工程师必备:前端的模块化
  16. 域名劫持定义及原理、域名被劫持解决办法有那些
  17. 呼叫中心运营管理的七点建议
  18. 海康威视设备 JAVA SDK SpringBoot实现人脸、车辆、门禁图片抓取
  19. C语言关键字浅析-short
  20. C++(36)——有一门课不及格的学生

热门文章

  1. 算法之求一个非负整数的平方根
  2. SonicWall防火墙IM禁止Skype软件
  3. 开机自启动程序脚本(部署)
  4. 怎样用计算机调出歌曲,怎样设置电脑开机音乐
  5. matlab中怎么表示几次方,用while 语句编写程式,k=1+2+4+8+…+2的62次方+2的63次方matlab中...
  6. 手把手教你读财报----银行业----第四课
  7. PLC机器人控制器编程笔记
  8. winscp连接nas root账户拒绝访问_树莓派 3B 结合 NextCloud PI 搭建皮米级 NAS 家庭储存...
  9. MS5611气压计数据测试报告
  10. 2020年12月国产数据库排行榜:榜首TiDB 2.7亿融资再破纪录;openGauss晋级十强!