jvm:对象

Posted z-xiaoyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm:对象相关的知识,希望对你有一定的参考价值。

 关于对象,我们需要面对的问题主要有对象的创建,对象在内存中的布局,对象的结构,对象的访问定位。

 

  对象的创建

  对象的创建过程如下图所示:

  其主要步骤有:给对象分配内存,初始化对象,执行构造方法。

  在对象创建过程中出现的线程安全性问题由线程同步和本地线程分配缓冲来解决

 

  对象在内存中的布局

  a、指针碰撞

  b、空闲列表

  对象内存的分配方式由堆内存是否规整决定,堆内存是否规整又有垃圾回收策略决定。如果堆内存规整则采用指针碰撞方式分配内存资源,如果堆内存不规整则采用空闲列表方式分配内存。

 

  对象的结构

  对象由三部分组成:

  自身运行时数据(Mark Word)包含哈希值,GC分带年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳

  类型指针:指向类的元数据的指针,记录对象的类型(并不是都存在)

 

  对象的访问定位

  对象的访问定位有两种方式:

  a、直接指针

  栈内存的引用直接指向堆内存的引用,优点:简单,减少了寻址的次数,性能比较高

 

  b、使用句柄

  栈内存的一个引用,指向堆内存的句柄池,由句柄池指向对象,优点:栈内存的引用不用发生变化,变得只是句柄池中指向对象的地址。

 

   其实关于类的一些信息是存储在方法区中的,也就是说,如果是直接指针方式的话,堆中的对象还有一个指向方法区的引用。如果是句柄方式的话,句柄池中还要包含一个指向方法区的引用。

 

以上是关于jvm:对象的主要内容,如果未能解决你的问题,请参考以下文章

性能分析 | JVM发生内存溢出的8种原因及解决办法

JVM垃圾回收的过程

小姨子深夜私聊我JVM是如何和“垃圾”发生关系的~我yue了

Java - new 一个对象是一个怎样的过程?JVM中发生了什么?

JVM 是如何处理异常的?

JVM发生频繁 CMS GC,罪魁祸首是这个参数!