`
dysfzhoulong
  • 浏览: 70439 次
  • 性别: Icon_minigender_1
  • 来自: 长沙市
社区版块
存档分类
最新评论

Java 虚拟机类装载体系

阅读更多
Java 虚拟机类装载体系
装载:把二进制形式的java类型读入Java虚拟机中通过该类型的完全限定名,产生一个代表该类型的二进制数据流。解析这个二进制数据流为方法区的内部数据结构。在堆上创建一个表示该类型的java.lang.Class类的实例。

1、何时装载
(1)隐式装载 package test; Public class A{ public void static main(String args[]){ B b = new B(); } } class B{C c;} class C{}
A、B、C类装载顺序:A 、B (C不装载)
(2)显示装载 A、使用Class类的forName方法。它可以指定装载器,也可以使用装载当前类的装载器。例如: Class.forName("test.A"); B、使用类路径类装载装载. ClassLoader.getSystemClassLoader().loadClass("test.A"); C、使用当前进程上下文的使用的类装载器进行装载,这种装载类的方法常常被有着复杂类装载体系结构的系统所使用。 Thread.currentThread().getContextClassLoader().loadClass(“test.A”) D、使用自定义的类装载器装载类 public class MyClassLoader extends URLClassLoader{ public MyClassLoader() { super(new URL[0]); } } MyClassLoader myClassLoader = new MyClassLoader(); myClassLoader.loadClass("test.A");

2、谁来装载——java虚拟机的三个类加载器
A、Bootstrap ClassLoader 根类加载器  负责加载Java的核心类。
B、Extension Classloader 扩展类加载器  负责加载JRE扩展目录中JAR的类包。(可以为Java扩展核心类以外的新功能)
C、System  Classloader 系统(应用)类加载器  负责加载CLASSPATH环境变量所指定的JAR包和类路径

3、类加载机制
(1)全盘负责:即一个类加载器负责加载某个Class的时候,该Class所依赖的和引用的其它Class也将由类加载器负责,除非显示的使用另外一个类加载器业载入。
(2)父类委托:先让父类加载器加载该Class,只有在父类加载器无法加载该类时,行尝试从自己的类路径中加载该类。
(3)缓冲机制:被加载过的Class都会被缓存,当需要这个Class时,类加载器就会到缓存中搜索Class,如果不存在该Class对象,系统会重新读取该类对应的二进制文件,并转换成Class对象,再放入缓存。
这就是为什么我们修改了Class后,程序必须重新启动JVM,程序所作的修改才会生效的原因; 

4、类的初始化时机
一个类经过加载-连接之后就是进行它的初始化;
当Java程序首次通过下面6种方式使用某个类或者接口时,系统就会初始化该类或接口
a, 创建类的实例。new 关键字,或反射创建实例,反序列化创建实例;
b, 调用某个类的静态方法。
c, 访问某个类或接口的静态属性,或为该静态属性赋值。
d, 使用反射强制创建某个类或接口对应的java.lang.Class对象。如,Class.forName(“Person”),如果系统还未初始化Person,那么Person就会被初始化;
e, 初始化某个类的子类时,该类的所有父类都会被初始化;
f , 直接使用java.exe命令来运行某个主类,程序会先初始化该主类;

5、类加载Class的大致步骤
①检测Class是否已加载,已加载则进行第8步,否则进行第2步;②如果父加载器不存在则进行第4步,存在则进行第3步;③ 请求父加载器加载该类,成功则进入第8步,不成功则进行第5步;④请求根加载器载入,成功则进入第8步,不成功则进行第7步;⑤寻找Class文件(从与此ClassLoader相关的类路径中寻找),找到则执行第6步,找不到则执行第7步;⑥从文件中载入Class,成功载入后进入第8步;⑦抛出ClassNotFoundException⑧返回Class
2
1
分享到:
评论
2 楼 rjhw 2011-05-24  
加载连接后就是初始化对hotspot是这样,但不全是,有迟解析和早解析区别,同时还要涉及到编译器优化等问题....
1 楼 dysfzhoulong 2011-04-05  

相关推荐

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...

    MiniJavaVM—个Java虚拟机的设计和实现

    MiniJavaVM—个Java虚拟机的设计和实现 在本篇文章中,我们将详细介绍 MiniJavaVM 的设计和实现,包括其总体架构、功能、运行环境和开发工具,以及具体的实现步骤。 第一章绪论 Java 虚拟机(Java Virtual ...

    Java技术与Java虚拟机

    JVM的体系结构包括类装载子系统和运行引擎,前者负责加载具有指定名称的类或接口,后者执行已加载类中的指令。JVM的内部结构分为五个主要部分:方法区、堆、Java栈、程序计数器和本地方法栈。方法区存储类信息,堆...

    Java虚拟机规范中文版

    《Java虚拟机规范中文版》详细阐述了JVM的工作机制,是开发者深入理解Java技术体系的重要参考资料。以下是对该书内容的概览: 1. **JVM架构** JVM分为几个主要组件,包括类装载器、运行时数据区、执行引擎、本地...

    Java虚拟机的深入研究

    JVM的体系结构包括类装载子系统和运行引擎。类装载子系统负责查找并装载类和接口,而运行引擎执行已装载类中的指令。此外,JVM还包含以下几个关键组件: 1. **方法区**:存储解析后的类信息,包括类的元数据和常量...

    一个Java虚拟机的设计和实现

    ##### 1.2 Java虚拟机的体系结构 JVM的架构主要包括以下几个关键组件: - **类装载子系统**:负责读取.class文件,并将其转化为运行时数据结构。 - **运行时数据区**:包括方法区、堆、线程私有的本地方法栈和程序...

    深入java虚拟机第二版_完整目录.pdf

    《深入Java虚拟机第二版》是探讨Java虚拟机(JVM)内部工作原理的经典之作,作者Bill Venners通过本书深入浅出地解析了Java虚拟机的体系结构和内部机制,为Java开发者提供了编写高效程序的基础理论支持。 Java...

    java虚拟机详解免费.pdf

    JVM的体系结构包括类装载子系统和运行引擎,前者负责加载具有特定名称的类,后者执行加载类中的指令。此外,JVM还包括以下五个关键组件: 1. **方法区**:存储解析后的类信息。 2. **堆**:存放程序初始化的所有...

    深入JAVA虚拟机

    Java虚拟机的体系结构主要包括以下几个方面: 1. **类装载子系统**:负责将Java类加载到内存中,解析类之间的依赖关系。 2. **运行时数据区**:包括方法区、堆、Java栈等,用于存储程序运行时的数据。 - **方法区*...

    java-jvm虚拟机原理.ppt

    Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了平台无关的运行环境。本篇文章将深入探讨JVM的生命周期、体系结构、类加载机制、内存区域以及垃圾收集。 首先,JVM的生命周期与Java程序紧密关联。...

    java虚拟机规范 java SE 7中文版

    《Java虚拟机规范 Java SE 7中文版》详细阐述了JVM的工作原理、内存管理、字节码执行机制以及相关的编程模型,是开发者深入理解Java技术体系的重要参考资料。 1. **JVM架构**:JVM主要由类加载器、运行时数据区、...

    深入Java虚拟机

    5.3 Java虚拟机的体系结构 5.3.1 数据类型 5.3.2 字长的考量 5.3.3 类装载器子系统 5.3.4 方法区 5.3.5 堆 5.3.6 程序计数器 5.3.7 Java栈 5.3.8 栈帧 5.3.9 本地方法栈 5.3.10 执行...

    java虚拟机

    ### Java虚拟机(JVM)详解 ...综上所述,Java虚拟机的体系结构复杂且功能强大,它是Java程序能够跨平台运行的关键所在。通过对JVM的理解和掌握,可以帮助开发者更好地编写高效稳定的Java应用程序。

    深入Java虚拟机.pdf

    《深入Java虚拟机》是由Bill Venners所著的一本详细解释Java虚拟机(JVM)体系结构和内部工作的书籍。在书中,作者深入探讨了JVM的各个方面,包括其体系结构、垃圾收集机制、Java安全模型、类的动态加载与扩展机制、...

    深入Java虚拟机读书笔记1

    类装载体系结构包括启动类装载器和用户定义的类装载器,形成了层次结构。Bootstrap ClassLoader首先加载JRE的核心类库,然后用户定义的类装载器加载应用程序的类,它们之间通过委托模型协作工作,保证类的唯一性。 ...

    javajvm虚拟机原理PPT课件.pptx

    Java虚拟机的生命周期可分为三个主要阶段:装载、连接和初始化。每次启动一个Java程序,都会创建一个Java虚拟机实例,该实例将管理Java程序的生命周期。Java虚拟机实例的生命周期结束时,该程序也将退出。 Java...

    java虚拟机详解.docx

    这些组成部分包括Java编程语言、Java类文件格式、Java虚拟机(JVM)以及Java应用程序接口(API)。它们共同构成了Java技术的基础。 - **Java编程语言**:这是开发者用来编写程序的工具。 - **Java类文件格式**:这是一...

Global site tag (gtag.js) - Google Analytics