继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

HotSpot虚拟机中的对象实例化和内存分配的过程

2023-08-13 10:01:18559浏览

一凡

2实战 · 485手记 · 29推荐
TA的实战

在HotSpot虚拟机中,对象实例化的过程包括两个主要阶段:类加载和实例分配。

类加载阶段

在类加载阶段,虚拟机会根据类的完整限定名来找到对应的二进制数据,并将其加载到运行时数据区的方法区中。这个二进制数据包括对象的字段和方法信息,而不包括对象的实例数据。

实例分配阶段

在实例分配阶段,虚拟机需要为对象分配内存空间。内存的分配方式可以有多种,其中有两种常用的方式:指针碰撞和空闲列表。

  • 指针碰撞:在堆内存中,用一个指针作为分界点,分为两个部分,一部分已经被使用,一部分还未被使用。分配内存时,移动指针指向的位置,保证内存分配的连续性。但是这种方式要求堆内存中被使用和未被使用的内存空间是连续的,并且需要考虑线程安全的分配。
  • 空闲列表:在堆内存中,空闲的内存被组织成一个列表,记录了已使用和未使用的内存块。分配内存时,从空闲列表中查找足够的空间来满足对象的实例数据大小。这种方式解决了内存的连续性问题,并且可以灵活地分配不连续的内存,但也需要考虑线程安全的分配。

除了这两种常用的方式,HotSpot虚拟机还会根据具体情况进行优化和改进。由于对象的实例数据大小不同,虚拟机会根据对象的大小选择合适的内存分配策略,例如利用TLAB(Thread Local Allocation Buffer)进行线程本地分配,提高分配效率。

总体而言,HotSpot虚拟机中的对象实例化的过程就是通过类加载阶段加载类的信息,然后在实例分配阶段为对象分配内存空间。内存的分配方式常用的有指针碰撞和空闲列表,具体的方式会根据对象的大小和虚拟机的优化策略而定。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP