(二)jvm-Java对象的创建,访问

2018-07-14  本文已影响0人  Vincilii

以Hotspot虚拟机为例,描述对象的 创建过程。

对象的创建

通过new关键字创建对象

  1. 虚拟机在遇到new关键字后先去常量池中寻找一个类的符号引用,
  2. 检查这个类是否被加载,解析和初始化,如果没有则执行类加载过程
  3. 为对象分配内存
    在类加载过程完成后类就已经确定了对象所需要的大小,然后从堆中划分出确定大小的一块内存
  4. 虚拟机初始化对象零值
    内存分配完成后,会对分配的内存空间进行零值初始化,保证java对象实例字段在java代码中可以不赋初始值就直接使用,程序可以访问到这些零值。
  5. 设置对象头信息
    例如对象是哪个类的实例,如何找到类类信息,hash码,GC分代年龄等。
  6. java程序初始化对象
    经历完上面过程,虚拟机层面看一个对象已经创建完成,但java程序层面的对象创建才刚刚开始。虚拟机执行完new指令后会接着执行<init>方法,这时候对象才会按照程序员的意图进行初始化,这样产生的对象才算是真正可用的对象。

对象内存布局

对象的内存布局分为三个区域


对象内存布局

对象的访问定位

java程序通过栈(Heap)上reference(引用)数据来操作堆上的具体对象。
目前访问对象的两种方式为句柄和直接指针两种

上一篇下一篇

猜你喜欢

热点阅读