JVM对象创建与定位访问机制具体是怎样的?

2026-04-30 12:561阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1190个文字,预计阅读时间需要5分钟。

JVM对象创建与定位访问机制具体是怎样的?

1. 创建对象+虚拟机接收到new指令时,检查该指令能否在常量池中定位到类符号引用,并确认该符号引用所代表的类是否已加载、解析和初始化。如若未找到,先执行类加载。

1.对象的创建

  • 虚拟机接收到new指令时,检查这个指令能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化。如果都没有,先执行类加载过程。
  • 在类加载通过后,虚拟机为新对象分配内存(把一块确定大小的内存从Java堆中划分出来),内存大小在类加载完成后即可完全确定。
  • 两种分配方式:
    • (1):指针碰撞:假设Java堆中内存是绝对规整的,即使用过的内存在一边,空闲的内存在另外一边,中间放着一个指针作为指示器,通过移动指针实现内存分配。
    • (2):空闲列表:如果Java堆中的内存并不是规整的,即已使用的内存和空闲的内存相互交错,虚拟机就必须维护一个列表,记录哪些内存块是可用的,通过从列表中寻找空间划分给对象实例来分配内存。
  • Java堆是否规整由所采用的垃圾收集器是否有压缩整理功能决定。
  • 在虚拟机中创建对象不是线程安全的行为,可能出现在给对象A分配内存,指针还没来得及修改,对象B又使用了原来的指针来分配内存。有两种解决方案:
  • (1):对分配内存空间的动作进行同步处理,实际上虚拟机采用CAS配上失败重试的方式保证更新操作的原子性;
  • (2):把内存分配的动作按照线程划分在不同的空间中进行,即每个线程在Java堆中预先分配一小块内存,称为本地线程分配缓冲(Thread Loal Allocation Buffer,TLAB)。
阅读全文

本文共计1190个文字,预计阅读时间需要5分钟。

JVM对象创建与定位访问机制具体是怎样的?

1. 创建对象+虚拟机接收到new指令时,检查该指令能否在常量池中定位到类符号引用,并确认该符号引用所代表的类是否已加载、解析和初始化。如若未找到,先执行类加载。

1.对象的创建

  • 虚拟机接收到new指令时,检查这个指令能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化。如果都没有,先执行类加载过程。
  • 在类加载通过后,虚拟机为新对象分配内存(把一块确定大小的内存从Java堆中划分出来),内存大小在类加载完成后即可完全确定。
  • 两种分配方式:
    • (1):指针碰撞:假设Java堆中内存是绝对规整的,即使用过的内存在一边,空闲的内存在另外一边,中间放着一个指针作为指示器,通过移动指针实现内存分配。
    • (2):空闲列表:如果Java堆中的内存并不是规整的,即已使用的内存和空闲的内存相互交错,虚拟机就必须维护一个列表,记录哪些内存块是可用的,通过从列表中寻找空间划分给对象实例来分配内存。
  • Java堆是否规整由所采用的垃圾收集器是否有压缩整理功能决定。
  • 在虚拟机中创建对象不是线程安全的行为,可能出现在给对象A分配内存,指针还没来得及修改,对象B又使用了原来的指针来分配内存。有两种解决方案:
  • (1):对分配内存空间的动作进行同步处理,实际上虚拟机采用CAS配上失败重试的方式保证更新操作的原子性;
  • (2):把内存分配的动作按照线程划分在不同的空间中进行,即每个线程在Java堆中预先分配一小块内存,称为本地线程分配缓冲(Thread Loal Allocation Buffer,TLAB)。
阅读全文