一、对象创建
类型信息在装载、连接和初始化之后,就可以使用了,可以访问类型的静态字段和方法,可以创建类型实例。对象的创建分为现实创建和隐式创建两种。
显示创建分为:1、通过new创建;2、通过java.lang.Class的newInstance方法创建;3、通过clone方法创建;4、通过java.io.ObjectInputStream的readObject方法创建。
隐式创建分为:1、启动类的main方法的string数组参数;2、常量池的CONSTANT_String_info表项被解析的时候会创建一个String对象;3、每个加载的类都会创建一个java.lang.Class对象;4、字符串+操作的时候,创建StringBuffer/StringBuilder对象。
二、对象在内存中的存储
非严格意义来说,对象都存储在堆上,由垃圾收集器负责回收不在被引用的对象。但是随着jvm运行期编译技术的不断进步,栈上分配对象和标量替换技术使得非逃逸对象可以分配在栈上。当然绝大多数对象都是分配在堆上的,此处我们主要讨论对象在堆中的存储。
对象的内容有:1、实例数据;2、指向堆中类型信息的指针;3、对象锁相关的数据;4、多线程协调完成同一件事情的时候wait set相关的队列;5、垃圾收集相关的内容,如存活时间、finalize方法是否运行过。
对象在内存中存储主要有两种方式:1、堆划分为句柄池和对象池,创建对象后的得到的引用是指向句柄池的指针,句柄池指针则指向对象池里的对象;2、堆只分为对象池,引用直接指向对象池中的对象。具体前边这篇博客已经有描述。这里顺便解答那篇博客中遇到的问题,Integer对象中那个不是实例数据和类型指针的数据是什么。
当然这还是翻书得到的答案,而且也只是HotSpot VM中的那4个字节,被称作对象头,官方称为Mark Word:1、25bits是对象的hashCode;2、4bits是垃圾收集相关的分代年龄;3、2bits是对象锁相关的信息,实现轻量级锁和偏向锁要用到;4、1bit是闲置位,值为0。
分享到:
相关推荐
关于JVM中对象的生命周期的讲解,不错!!
一份JVM学习的笔记,含查看JVM运行时信息\JVM垃圾收集信息\JVM锁信息等
java之jvm学习笔记五(实践写自己的类装载器)
JVM学习笔记.docx
java之jvm学习笔记十一(访问控制器)-源码
java之jvm学习笔记八(实践对jar包的代码签名)
jVM学习笔记.ppt
从JVM内存模型、常用JVM参数、垃圾回收算法和垃圾回收器等几个角度学习JVM
JVM学习笔记(缓慢更新).md
jvm经典笔记
包含了jvm的视频,jvm的笔记
JVM 学习笔记(Java虚拟机)
jvm中篇笔记.md
买的JVM学习资料(深入JVM内核—原理、诊断与优化),给大家分享还有自己整理的学习笔记
一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7
java之jvm学习笔记九(策略文件)
Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,
JVM学习笔记核心知识点整理,包含类文件加载机制,运行时数据,JVM内存模型,GC算法,垃圾收集器分类等
主要介绍了Java对象在JVM中的生命周期详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧