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关键字直接构建对象

还有一个忘了。

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

posted on 2011-08-14 12:31  wenfeng762  阅读(574)  评论(0编辑  收藏  举报