Java对象在Java虚拟机的创建过程

创建

1、相应类加载检查过程

Java程序中的“new”操作会转换为Class文件中方法的“new”字节码指令。
JVM(本文特指HotSpot)遇到new指令时,先检查指令参数是否能在常量池中定位到一个类的符号引用:
A)、如果能定位到,检查这个符号引用代表的类是否已被加载、解析和初始化过;
B)、如果不能定位到,或没有检查到,就先执行相应的类加载过程;

2.分配内存

分配内存有两种方法。内存大小在类加载时候已被确定。
a)指针碰撞:内存分配事规整的,在内存中,一边是分配过的,一边是没有分配过的,中间是区分它们的指针,只需要这个指针向空闲空间那边移动一段和对象大小相等的距离即可
b)空闲列表:内存分配是不规整的,空闲片段和已分配片段交织一起,这是后,虚拟机需要维护一张空闲列表,每次对内存的操作就是对表的修改操作。

3.线程安全问题

对象分配内存在虚拟机是很常见的操作,所以在并发的情况下有可能出现 “线程A给某个对象分配内存移动指针,还没来的及移动指针,线程B就使用了该指针” 的问题。处理方法也是有两种。
a)同步处理:CAS加失败重试的方式,这样会影响到性能。
b)直接为每个线程分配一段固定大小的缓存。

4.初始化

分配完内存之后,虚拟机会把分配到的内存空间都会初始化为零值,保证了实例字段不被初始化就能使用,只是实例字段都是零值。

5.执行对象实例方法

对象执行了方法,按照程序员的想法初始化之后,一个真正可用的对象就产生了。
通常,经过上面5步对象才完全new出来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值