首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

jvm联接模型

2012-09-25 
jvm连接模型1 java虚拟机构成类加载系统 执行引擎 运行时数据区运行时数据区包括 堆、栈、方法区、本地方法区

jvm连接模型

1 java虚拟机构成

类加载系统 执行引擎 运行时数据区

运行时数据区包括 堆、栈、方法区、本地方法区、pc寄存器。其中堆、方法区是多线程共享的,其它的是线程安全的。

2 java虚拟机链接模型

装载 连接 初始化

装载的产物:

一个堆上的class实例:是连接类实例与方法区数据结构的桥梁,通过class实例,类的实例能够知道类本身的详细构成信息

方法区上的一个数据结构:用来描述一个类的的构成信息。包括:

所有方法的描述(参数,返回类型等等);所有超类的描述(如果有的话);所有实现了的接口列表(如果有的话);所有属性的描述;类加载器的索引。

?

虚拟机中的类,全路径构成是:类加载器名称+类的全路径

类加载器分为
启动类加载器:java核心api
系统类加载器:classpath下寻址
用户自定义类加载器:

类加载器可以用来区分类,比如经常出现这种情况:在WEB-INF/lib下有两个jar包a.jar和b.jar,两个jar包中都包含com.baidu.test.A.class,加载后就不知道虚拟接加载的是哪个类,这说明tomcat设置者用同一个类加载器来管理WEB-INF/lib下的class

?

连接:
分为验证、准备和解析。连接后,常量池中符号引用已经被替换为直接引用,每个属性已经被分配了内存,整个类的信息已经被验证是合法的。

初始化:

只有类被主动使用时,才会触发初始化。主动使用的场景包括:

调用了类的main方法

通过反射构建了类的对象

调用了类的静态方法

访问了类的静态属性:如果直接访问父类的静态属性,那么只能导致父类被初始化,子类不会被初始化。

通过new关键字直接构建对象

还有一个忘了。

其它情况都是被动调用,不会触发类的初始化。

?

热点排行