new Object(); 做了哪些事情
题目
new Object()这行代码底层做了哪些事情?
参考答案
大致会经历这几个步骤:
- 检查类是否已经被加载、链接、初始化
- 在堆上分配对象内存
- 将对象字段设置为默认值
- 设置对象头信息
- 调用构造方法完成初始化
- 返回对象引用
如果开启了 TLAB,对象分配会更快;并发分配时 JVM 会通过 CAS 等方式保证线程安全。
回答展开
- 对象创建题建议按类加载、内存分配、默认初始化、构造执行的顺序来讲。
- 如果能补充 TLAB、对象头和逃逸分析,会更显得有深度。
- 这类题本质上在考你是否理解 JVM 对象生命周期的起点。
实际场景
比如某个接口在循环里频繁 new 临时对象,虽然代码本身没错,但很可能造成年轻代对象暴涨和频繁 GC,这类问题在性能优化里很常见。