深入JVM 对象优先在Eden分配
前言:对象的内存分配,大方向讲,指的是对象在堆上分配,对象的主要分配发生在新生代的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分配相关推荐
- JVM--基础--09--内存分配策略--对象优先在Eden分配
JVM–基础–09–内存分配策略–对象优先在Eden分配 1.测试 1.1.代码 /*** * @描述:对象优先在Eden分配* @author feiZhou* @date 2018年11月21日上 ...
- 白话 垃圾回收之对象优先在Eden分配
借用了这里的一张图,如侵权请联系删除. 这次实战是<深入理解Java虚拟机> P92 的例题,这里分析加强记忆. 参数 新生代:Parallel Scavenge收集器 老年代:ParOl ...
- 《深入理解java虚拟机v3》对象优先在Eden分配 > 代码单3-7 新生代Minor GC
对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配.当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. HotSpot虚拟机提供了-XX:+PrintGCDetai ...
- JVM的内存分配与回收策略实战——对象优先在Eden分配
本文代码在测试时使用的垃圾收集器组合是Serial/Serial Old. 这里还需要介绍一些JVM的基本参数,本文中进行如下设置: -verbose gc 打印垃圾收集信息 -Xms20M 堆容量设 ...
- 【JVM】8_对象优先在Eden分配
/*** VM参数有这些:* -verbose:gc : 表示输出虚拟机中GC的详细情况,输出像: [Full GC 168K->97K(1984K), 0.0253873 secs]* -Xm ...
- JVM学习笔记-GC日志分析(对象优先在Eden区分配)
前言 在进行GC日志分析前,先了解一下JVM虚拟机运行时数据区的主要划分: Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域 有各自的用途,以及创建和销毁 ...
- jvm深入理解:内存分配与回收策略(优先在Eden分配、大对象直接进入老年代、长期存活的对象将进入老年代、动态对象年龄判定、空间分配担保)
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存. 象的内存分配,从 ...
- JVM——对象创建与内存分配机制
文章目录 1.对象的创建 1.1.类加载检查 1.2.分配内存 1.3.初始化 1.4.设置对象头 1.5.执行方法 2.对象内存分配 2.1. 对象栈上分配 2.2.对象在Eden区分配 2.3.大 ...
- 32g内存 java开发,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧...
内存分配机制 逐步分析 类加载检查: 虚拟机遇到一条new指令(new关键字.对象的克隆.对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否应被 ...
最新文章
- matlab数值计算好处,第四章 MATLAB 的数值计算功能(一)
- DeepMind将博弈论融入多智能体研究,让纳什均衡变得更简单
- 算法 | 尺度不变特征变换匹配算法 Scale Invariant Feature Transform (SIFT)
- 工作62:显示省略号
- 电脑有回声_电脑连接麦克风有回音怎么办?麦克风回声的解决方法
- 统一沟通-技巧-7-Lync 2010-配置信息-EWS未部署
- 默纳克系统服务器看平衡系数,默纳克启动停车舒适感调整
- Flutter之路由系列之Navigator简析
- JAVA JSP图书管理图书系统 servlet图书管理系统实现简单的图书管理系统源码
- WhereHows 安装
- delphi oracle 三层,delphi+Oracle做的三层结构的干部管理系统
- [转]应该被记住的天才,写在图灵诞辰100周年
- Halcon|通过旋转前后3维坐标点求旋转轴及旋转角度
- 前端 | 表格(table)的合并
- 前端工程师必备:前端的模块化
- 域名劫持定义及原理、域名被劫持解决办法有那些
- 呼叫中心运营管理的七点建议
- 海康威视设备 JAVA SDK SpringBoot实现人脸、车辆、门禁图片抓取
- C语言关键字浅析-short
- C++(36)——有一门课不及格的学生
热门文章
- 算法之求一个非负整数的平方根
- SonicWall防火墙IM禁止Skype软件
- 开机自启动程序脚本(部署)
- 怎样用计算机调出歌曲,怎样设置电脑开机音乐
- matlab中怎么表示几次方,用while 语句编写程式,k=1+2+4+8+…+2的62次方+2的63次方matlab中...
- 手把手教你读财报----银行业----第四课
- PLC机器人控制器编程笔记
- winscp连接nas root账户拒绝访问_树莓派 3B 结合 NextCloud PI 搭建皮米级 NAS 家庭储存...
- MS5611气压计数据测试报告
- 2020年12月国产数据库排行榜:榜首TiDB 2.7亿融资再破纪录;openGauss晋级十强!