网站首页 > 精选教程 正文
接上一篇Java面试之对象的内存结构,因篇幅太长所以进行了拆分。
首先,在JVM的堆内存里面分为Eden Space,Survivor Space,Old Generation。
当我们使用new关键字创建一个对象的时候,JVM会先在Eden Space分配一块内存来存储这个对象。当Eden Space的内存空间不足的时候,会触发Young GC进行对象回收。那些因为存在引用关系而无法回收的对象,JVM会把它们转移到Survivor Space。
Survivor Space内部又分为From Survivor空间和To Survivor空间,刚从Eden区未回收转移过来的对象会分配到From区,每经历一次Young GC,这些没有办法被回收的对象就会在From区和To区来回移动,每移动一次,这个对象的GC年龄就加1。默认情况下GC年龄达到15的时候,JVM就会把这个对象移动到Old Generation。
其次,一个对象的GC年龄,是存储在对象头里面的,一个Java对象在JVM内存中的布局由三个部分组成,分别是对象头,实例数据,对齐填充。而对象头(Mark Word)里面有4个bit位来存储GC年龄。而4个bit位能够存储的最大数值是1111(十进制就是15),所以从这个角度来说,JVM分代年龄之所以设置成15次是因为他能够存储的数值就是15。
虽然JVM提供了参数来设置分代年龄的大小,但是这个大小不能超过15。而从设计角度来看,当一个对象触发了最大值15次GC,还没有办法被回收,就只能移动到Old Generation了。
另外,设计者还引入了动态对象年龄判断的方式来决定把对象转移到Old Generation,也就是说不管这个对象的GC年龄是否达到了15次,只要满足动态年龄判断的依据,也同样会转移到Old Generation。
猜你喜欢
- 2024-11-10 为什么28岁不能学java? 28岁开始学编程晚吗
- 2024-11-10 gc的年龄信息存储在什么地方? 年龄信息用什么数据类型存储
- 2024-11-10 JVM基础学习 jvm入门到精通
- 2024-11-10 Java-对象到底占多少个字节?计算规则是什么?
- 2024-11-10 浅谈JAVA中的基本变量 java常用变量
- 2024-11-10 大数据必学Java基础(十三):基本数据类型的转换
- 2024-11-10 Java码农35岁之后只能送外卖? 我的世界java
- 2024-11-10 这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)
- 2024-11-10 2021-01-03:java中,描述一下什么情况下,...
- 2024-11-10 零基础学Java之数据类型与变量(上集)
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)