前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java虚拟机 - 创建对象

Java虚拟机 - 创建对象

作者头像
承苏凯
发布2020-07-24 10:07:49
4660
发布2020-07-24 10:07:49
举报
文章被收录于专栏:唯手熟尔唯手熟尔

对象的创建

重点:

  • 首先遇到new指令会检查这个指令的参数能不能在常量池中定位到一个类的符号引用(我的理解是创建一个类实例的前提是已经保证这个类已经加载到常量池中),检查这个符号引用是否被加载、解析、和初始化,如果没有,那必须先执行相应的类加载过程 -> 为新生对象分配内存

例如下图:创建一个类,那么我们可以看到在编译好的class文件,通过jclasslib插件解析该文件,我们发现这个类中的信息存放在这些常量池中,所以在new之前才会去常量池中定位类的符号引用

WX20200601-124454
WX20200601-124454
  • 对象分配多大的内存在类加载完成后就可以确定
  • 指针碰撞、空闲列表使用哪一种内存分配策略基于垃圾收集器是否带有空间压缩整理的能力决定,Serial、Parview(具有Compact)而CMS(基于Sweep清除算法)
  • CAS+失败重试(cmpxchg是下X86的CAS指令,通过CAS方式分配内存,并发失败的话转到retry中重试直到成功分配)保证内存更新操作的原子性另一种方案是TLAB
  • 内存空间必须初始化为零值
  • 是否启用偏向锁设置对象头信息(数据的元数据信息、哈希码、对象的GC分代年龄)
  • new指令之后会执行init<>()方法
image-20200601220636652
image-20200601220636652

总结

了解虚拟机中new一个对象实例的流程

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对象的创建
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档