对象的创建
Posted JAVA 手艺人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象的创建相关的知识,希望对你有一定的参考价值。
-
创建对象
- 像Spring框架中,类一般都是单例,在创建之前会判断是否创建过。未创建,或者作用域非单例,则会新建对象。
-
class格式的二进制字节流
- class 规定的是字节的格式。
- 可以从文件,网络,数据库,其他文件中获取。
-
需要检测类是否加载 运行时加载
- 如何判断的?当前类加载器-> 双亲委派模型
- 根据类加载器判断class 是否被加载
- 两个类是否相同
- 类的加载器相同
- 类的全限定名一致
-
如何加载,通常类加载器
- 双亲委派模型,为了保证类相同、不重复加载
- 先检查自己是否加载过。没有,下一步
- 自己先不加载,委托组合的加载类加载。
- 加载不了,才自己去加载
- 最顶端是 Boostrap类加载器--只识别某些设定的class
- 模型的破坏
- 模型后提出的,so
- 越是基础的类由越上层的加载器加载,如果基础类需要回调用户的代码,bootsrap 及时扫描到也不会加载,只好委托子类加载器(线程上下文类加载器)加载。
- SPI,JDBC
- OSGI介绍下。
- 模块化热部署。每个模块都有自己的类加载器
- 特定类交给父类加载器,其余的要么自己加载,要么交给平级的类加载器
- 双亲委派模型,为了保证类相同、不重复加载
-
加载class
- 验证
- 准备 - 分配方法区内存 常量池,设置类变量的零值
- 解析 加载涉及到的类-伴随着验证
- 类的初始化,初始化类变量:static 模块等
- 可被虚拟机直接使用额Java类型
-
分配内存 - 堆对象内存
-
设置零值
-
设定对象头、类信息、GC年龄段
-
初始化实例变量等。
以上是关于对象的创建的主要内容,如果未能解决你的问题,请参考以下文章
设计模式代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )