美文网首页
JVM-对象的创建、布局、访问

JVM-对象的创建、布局、访问

作者: 小明17 | 来源:发表于2020-09-07 14:24 被阅读0次

创建

1.遇到new指令
2.检查指令的参数能否在常量池中定位到一个类的符号引用。并检查这个符号对应的类是否被加载、解析和初始化
3.没有则先加载类(类的加载过程)
4.分配堆内存(两种方式)

  • 指针碰撞:在规整的堆内存中把用于划分空闲和已使用的指针往空闲方向挪动相应的距离。(适用整理类算法:Serial、ParNew)
  • 空闲列表:非规整内存时,用来维护可用内存块的列表。(使用清除类算法:CMS)
    使用哪种方式取决于JVM使用的垃圾回收器

分配内存时的线程安全问题:

  • CAS+失败重试
  • 本地线程分配缓冲(TLAB):把内存分配的按照线程划分在不同的空间进行,也就是每个线程预分配一小块内存

5.将分配到的内存空间都初始化为0值(TLAB需要提前进行),这保证了对象的实例字段不赋初始值就可以使用。
6.设置对象头中的信息(元数据、对象hash code、GC分代年龄、锁)
7.以上JVM的操作完成,交给java线程执行init。

布局

对象头+实例数据+对齐填充

1.对象头(Mark Word + 类型指针)

存储内容 标志位 状态
对象哈希码、分代年龄 01 未锁定
指向锁记录的指针 00 轻量级锁定
指向重量级锁的指针 10 (膨胀)重量级锁定
null 11 GC标记
偏向线程ID、偏向时间戳、对象分代年龄 01 可偏向

相关文章

  • JVM-对象的创建、布局、访问

    创建 1.遇到new指令2.检查指令的参数能否在常量池中定位到一个类的符号引用。并检查这个符号对应的类是否被加载、...

  • JVM-对象内存布局

    jvm-对象内存布局 对象内存结构概述 对象的创建过程: jvm将对象所在的class文件加载到方法区中 jvm读...

  • JVM-对象的创建及访问

    一.对象的创建 当执行一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查...

  • JVM对象探秘

    1.对象的创建 2.对象的内存布局 3.对象的访问定位

  • JAVA对象的创建、内存布局、 访问定位

    JAVA对象的创建、内存布局、 访问定位 时间:20180304 1.Java对象的创建详解 一个简单的创建对象语...

  • 对象的实例化

    创建对象的方式 对象创建的过程 对象的内存布局 对象的访问定位 hotspot使用直接指针 其他的方式:句柄

  • Java对象

    Java对象的内存布局?对象的访问?new对象的过程? 一、Java对象的内存布局 对象的创建过程就是在堆上分配实...

  • JVM(八):Java 对象模型

    JVM(八):Java 对象模型 本文将学习对象是如何创建的,对象的内存布局,以及如何定位访问一个对象。 对象创建...

  • 第二章 Java内存区域与内存溢出异常(2)

    对象的创建,内存布局和访问定位 1. 对象的创建 Java中创建对象经常用的new关键字,那么在虚拟机中,对象(只...

  • java对象的创建、内存布局&访问过程解析学习笔记

    前言: 了解java对象从创建、存储&怎么被使用的整个过程十分重要 对应过程则是:对象创建、对象内存布局、对象访问...

网友评论

      本文标题:JVM-对象的创建、布局、访问

      本文链接:https://www.haomeiwen.com/subject/lfokektx.html