首页
IT
登录
6mi
u
盘
搜
搜 索
IT
JAVA虚拟机之创建对象
JAVA虚拟机之创建对象
xiaoxiao
2021-03-25
139
实际开发中我们创建一个对象一般是通过New关键字来创建的~那么在虚拟机中是如何创建对象的呢?当遇到一条new指令后,会检查这个指令的参数在常量池中是否对应一个类的符号引用,并检查这个引用是否被虚拟机加载,解析和初始化过,若没有,先执行这个类的类加载过程。
在类加载完成后,将为这个对象进行初始化工作,就是在堆中为此类开辟一块内存空间,如何开辟呢?
指针碰撞:如果堆是整齐划分的,用过的放在一边,空闲的放在一边,那么中间有个指针作为分界的指示器,分配内存及时把指针忘空闲空间挪出对象需要的空间即可
空闲列表:内存空间是不规整的,会把空闲块记录在一个列表上,在列表上找到空间大于等于对象所需的空间,并标记那块空间被占用。
在多线程情况下,无法保证操作的原子性,有可能出现正在给A对象分配空间,指正还没修改,B对象又使用原来的指针来分配空间。要解决这个问题,可以通过(1):采用CAS和失败重试方式保证更新操作的原子性,(2):给每个线程单独在堆中分配一块独立的空间TLAB
转载请注明原文地址: https://ju.6miu.com/read-8010.html
技术
最新回复
(
0
)