博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java对象的加载过程
阅读量:5086 次
发布时间:2019-06-13

本文共 597 字,大约阅读时间需要 1 分钟。

1检测类是否被加载

虚拟机遇到对象的创建

首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过(类的加载过程)

如果没有,那必须先执行相应的类加载过程。

2为新生对象分配内存

通过计算对属性计算在堆中分配空间。空间大小固定且不再更改。

由对象头,对象数据,补位码(每个对象位数都是8的倍数,不够的需要有补位码补位)三部分组成。

 

补充:

空间规整的情况下,在堆中使用指针碰撞

空间不规整的情况下,维护空闲列表,记录每一块的大小。使用空闲列表。

空间是否规整取决于垃圾回收器(GC的回收算法)

 

3初始化零值

将对象中所有非static属性赋予初值。

避免构造函数没有对所有属性进行赋值。

4进行必要的设置

虚拟机要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。这些信息存放在对象的对象头之中。

5执行init方法

执行构造函数,对对象属性进行赋值。

 

补充:

方法的调用/调用

创建一个虚函数表(指针数组)(堆中/还是常量池),其中的指针指向某个类的具体成员函数实现。为每一个类创建一个虚函数表的实例,并在每个对象中保存一个指向虚函数表的指针。

 

转载于:https://www.cnblogs.com/Gang-Bryant/p/10815164.html

你可能感兴趣的文章
Java跟Javac,package与import
查看>>
day-12 python实现简单线性回归和多元线性回归算法
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]使用 Razor 进行递归操作
查看>>
[转]Android xxx is not translated in yyy, zzz 的解决方法
查看>>
docker入门
查看>>
Android系统--输入系统(十一)Reader线程_简单处理
查看>>
监督学习模型分类 生成模型vs判别模型 概率模型vs非概率模型 参数模型vs非参数模型...
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
实验五 Java网络编程及安全
查看>>
32位与64位 兼容编程
查看>>
iframe父子页面通信
查看>>
ambari 大数据安装利器
查看>>
java 上传图片压缩图片
查看>>
magento 自定义订单前缀或订单起始编号
查看>>
ACM_拼接数字
查看>>
计算机基础作业1
查看>>
Ubuntu 深度炼丹环境配置
查看>>
C#中集合ArrayList与Hashtable的使用
查看>>
从一个标准 url 里取出文件的扩展名
查看>>