【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位
对象实例化内存布局与访问定位 从各自具体的 内存分配 上来讲 new 的对象放在 堆 中 对象所属的类型信息是放在 方法区 的 方法当中的局部变量放在 栈空间 这 new 的对象怎么把三块粘合到一起 就是这章的内容了 对象实例化 面试题 美团: 对象在 JVM 中是怎么存储的? 对象头信息里面有哪些东西? 蚂蚁金服: 二面 Java 对象头有什么? 从对象创建的方式和步骤开始说 对象创建方式 new:最常见的方式,单例类中调用 getInstance 的静态类方法,XXXFactory 的静态方法 Class 的 newInstance 方法:反射的方式,在 JDK9 里面被标记为过时的方法,因为只能调用空参构造器,权限必须是 public Constructor 的 newInstance(XXX):反射的方式,可以调用空参、带参的构造器,权限没有要求 使用 clone() :不调用任何的构造器,要求当前类需要实现 Cloneable 接口中的 clone() 方法 使用反序列化:反序列化一般用于 Socket 的网络传输,从文件中、从网络中获取一个对象的二进制流 第三方库 Objenesis 创建对象的步骤 判断对象对应的类是否加载、链接、初始化 虚拟机遇到一条 new 指令,首先去检查这个指令的参数能否在 Metaspace 的常量池中定位到一个类的符号引用