0
点赞
收藏
分享

微信扫一扫

HotSpot虚拟机的学习


资源

jvm虚拟机模型

  • 对象的创建
    当虚拟机遇到一条字节码的new命令时,首先将区检查这个指令是否以及在常量池中,可以定位到一个类的符号引用,并且检查引用的类是否被加载、解析与初始化过。如果没有,就将执行相应的类加载过程。
    类检查通过后将进行给新生的对象分配内存,内存的大小在的加载后就可以确定。就是将一块确定大小的内存从java堆中划分出来。采用指针碰撞的方式。
  • 解决对线程创建在并发情况下的线程安全,通过这两个方法
    (1)对分配的内存空间动作进行同步处理–实际上虚拟机采用的是CAS配上失败重试的方式来保证更新操作的原子性。
    (2)另外一个是将内存分配的动作按照线程划分为不同的空间进行,预分配空间给每个线程,即本地缓冲区(TLAB)
  • 内存分配完毕后将初始化零值
  • 对象的创建内存布局
    对象可以划分为三个部分,对象头,实例数据,对其填充。
    Hotspot虚拟机对象的对象头包括两类信息:
    (1)是存储对象自身运行时数据,如hashcode、GC分代年龄、锁状态的标志等。
    (2)另外一部分是类型指针,通过指针来确定该对象是那个类的实例。
  • 对象的访问定位
    兑现的方法的访问方式有句柄访问与直接指针两种
    (1)句柄访问时在java堆中划分出一块内存做句柄池,reference是对象的句柄地址,句柄中包含对象的实例数据与类各自的地址
    (2)直接指针式reference中存储的直接是对象的地址,减少一次访问开销


举报

相关推荐

0 条评论