zoukankan      html  css  js  c++  java
  • Java虚拟机构建对象过程小记

      Java对象的内存分布

      Java对象的构建

      Java程序中,新建对象,除了常见的new语句之外,还可以通过反射机制、Object.clone方法、反序列化以及Unsafe.allocateInstance方法来新建对象.

      其中,Object.clone方法和反序列化通过直接复制已有的数据,来初始化新建对象的实例字段。Unsafe.allocateInstance方法则没有初始化实例字段,而new语句和反射机制,则是通过调用构造器来初始化实例字段。

        以new语句为例,它编译而成的字节码将包含用来请求内存的new指令,以及用来调用构造器的invokespecial指令。

        关于构造器:

          1. 如果一个类没有定义任何构造器,Java编译器会自动添加一个无参构造器

          2. 子类的构造器需要调用父类的构造器。如果父类存在无参构造,该调用可以是隐式的,即Java编译器会自动添加对父类构造器的调用。而如果父类没有无参构造,则子类的构造器需要显式调用父类带参构造。

            显式调用,分为两种:super -- 调用父类构造器 ; this -- 调用同一个类中的其他构造器

      压缩指针

      在Java虚拟机中,每个Java对象都有一个对象头(object header),这个由标记字段和类型指针所构成。其中,标记字段用以存储Java虚拟机有关该对象的运行数据,如哈希码、GC信息以及锁信息,而类型指针则指向该对象的类。

      

  • 相关阅读:
    豆瓣书籍数据采集
    动画精灵与碰撞检测
    图形
    模块
    对象
    函数
    列表与字典
    python 感悟
    SqlServer自动备份数据库(没有sql代理服务的情况下)
    关于AD获取成员隶属于哪些组InvokeGet("memberOf")的问题
  • 原文地址:https://www.cnblogs.com/nyatom/p/9593619.html
Copyright © 2011-2022 走看看