网站首页 > 技术文章 正文
前置知识
- Minor GC:新生代收集,又称为Young GC;
- Major GC:老年代垃圾收集,又称为Old GC;
- Full GC:整个java对和方法区的垃圾收集;
gc的年龄是指对象在垃圾回收收集(gc)过程中的年龄,那么在了解它之前,我首先看看,jvm的内存分配策略是什么样的。
内存分配策略
对象出生在Eden区,当Eden区空间不足时会触发Minor GC,并将存活的对象移动至Survivor区中,同时将对象的年龄设为1,由于回收的操作比较频繁,因此每一次的Minor GC都会使对象的年龄信息增加1,当年龄达到默认的15次时,就会晋升至老年代,可以通过参数来调整,这里有个前提,如果对象是大对象(超过Eden的一半)的话,会直接分配中至老年代。
在Survivor中,相同年龄的所有对象大小总和大于Survivor空间的一半时,年龄大于或者等于该年龄的对象会直接进入到老年代,无需年龄达到默认要求。
因为对象头记录位只有4位,因此1111的值为15,多以gc的年龄最大为15次
对象信息
对象头信息包括了Mark Word、?类型指针(?Klass Pointer)?,?以及对于Java数组对象还包括数组长度。?
- Mark Word:?用于存储对象自身的运行时数据,?如快速定位的哈希码、?GC分代年龄、?锁状态标志、?线程持有的锁、?偏向线程ID、?偏向时间戳等。?Mark Word被设计成一个非固定的数据结构,?以便在极小的空间内存储尽量多的信息,?它会根据对象的状态复用自己的存储空间。
- 类型指针(?Klass Pointer)?:?指向对象的类的元数据指针,?虚拟机通过这个指针确定这个对象是哪个类的实例以及类的字段、?方法信息。?
- 数组长度:?如果对象是Java数组,?对象头中还有一块用于记录数组长度(?Array Length)?的数据,?因为普通对象可以通过Java对象元数据确定大小,?而数组对象不可以。
因此对于以上问题的答案,我们分析可知,对象的GC年龄存储在对象头信息的Mark Word中。
- 上一篇: 这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)
- 下一篇: 7.Java获取用户输入
猜你喜欢
- 2024-12-08 一次性把JVM讲清楚,别再被面试官问住了
- 2024-12-08 Java对象的生命周期
- 2024-12-08 7.Java获取用户输入
- 2024-12-08 这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)
- 2024-12-08 面试官:Java对象在什么情况下会进入老年代?
- 2024-12-08 【技术探秘】深度解析对象在 JVM 中的创建过程!
- 2024-12-08 今年太卷了,现在学Java约等于49年入国军
- 2024-12-08 武汉不同程序员工资中位数和年龄,JAVA超11.5K,46%的人25-29岁
- 2024-12-08 Spring Boot 中利用观察者模式实现学生表年龄更新联动
- 2024-12-08 Java 之父求职被嫌年纪大
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)