首页 > 编程语言 > 详细

JAVA虚拟机:对象的创建

时间:2019-12-25 23:22:20      阅读:92      评论:0      收藏:0      [点我收藏+]

在虚拟机中,当遇到需要new一个对象时,虚拟机首先会去处于方法区的常量池中查找new指令的参数,即查找次类的符号引用是否已存在,并且检查此符号引用的代表的类是否已经做过加载、解析和初始化,如果做过则不会执行相应的类的加载过程,如果未做过,则先执行类的加载过程,执行完毕类加载过程后,虚拟机开始在堆区未此新生的对象分配内存。

 

分配内存方式:

1、指针碰撞方式:

   分配过程:将分配内存的指针向内存空闲区域移动一段与对象大小相等的距离,为什么叫"指针碰撞”,因为如果并发new多个对象,指针移动很可能出现刚分配给A一段内存,但尚未完毕的时候,B也同时获得了这块内存,此时会发生对象内存碰撞现象。

2、空闲散列方式:

     分配过程:虚拟机维护一个列表,记录可用内存块,每次从列表中寻找足够大的空间划分给对象实例后,更新列表记录。

防止并发分配内存策略:

     1、采用CAS+失败重试方式报证更新操作的原子性。

      2、按线程划分不同的空间,虚拟机预先为每个线程分配本地线程分配缓冲(TLAB),哪个线程要分配内存,则在哪个线程的TLAB上分配,当TLAB使用穷尽时,进行同步锁定即第一种方式。

 

内存分配完毕后,new操作完毕,接着,虚拟机开始执行init方法,将对象按照程序的要求进行初始化,次操作完毕后,一个完整的对象创建完毕。                              

JAVA虚拟机:对象的创建

原文:https://www.cnblogs.com/Yloon/p/12098897.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!