面试题:JVM(四)

new对象流程?(龙湖地产)

对象创建方法,对象的内存分配。(360安全)

1. 对象实例化

创建对象的方式有几种?

创建对象的步骤

指针碰撞:以指针为分界线,一边是已连续使用的内存空间,一边是完全没有使用的内存空间,此时开辟新的堆区空间为对象分配内存只需将指针移动即可

空闲列表:已使用的空间并不连续,列表会记录这些不连续但未使用的内存地址,但有需要就直接将列表所指向的一块空间分配给对象,并将该空间的地址移除列表

2. 对象内存布局

Java对象头里有什么 (蚂蚁金服)

对象头信息里面有哪些东西? (美团)

对象在JVM中是怎么存储的

2.1 对象头

对象头:它主要包括两部分。

  • 一个是对象自身的运行时元数据(mark word)。
  1. 哈希值(hashcode):对象在堆空间中都有一个首地址值,栈空间的引用根据这个地址指向堆中的对象,这就是哈希值起的作用
  2. GC分代年龄:对象首先是在Eden中创建的,在经过多次GC后,如果没有被进行回收,就会在survivor中来回移动,其对应的年龄计数器会发生变化,达到阈值后会进入养老区
  3. 锁状态标志,在同步中判断该对象是否是锁
  4. 线程持有的锁
  5. 线程偏向ID
  6. 偏向时间戳
  • 另一个是类型指针,指向元数据区的类元数据InstanceKlass,确定该对象所属的类型
  • 此外,如果对象是一个数组,对象头中还必须有一块用于记录数组的长度的数据。

因为正常对象元数据就知道对象的确切大小。所以数组必须得知道长度。

相关推荐
李慕婉学姐11 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
数据皮皮侠AI13 小时前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
奋进的芋圆13 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin13 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model200513 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉14 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国14 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_9418824814 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈15 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_9915 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc