我们知道,
JVM是通过调用一个
Class类得
main方法来进入一个类得,这个
main方法必须是
public、
static、
void修饰的。但是在这之前,
JVM还需要做一系列的准备工作。在这节里,我们分析一个
Java类是如何被
JVM加载运行的。
JVM要调用一个类里的方法需要经过以下几个步骤:类装载、链接、初始化。
1 类装载:
JVM通过类得全限定名(包命
+类名)找到类的
.class文件。然后把这个
.class文件加载进来,这个过程需要通过
ClassLoader来实现。
JVM的类加载系统结构如下
(图
:1-1):
Boostrap ClassLoader:启动类加载器,它用来加载一些
jdk的核心类,主要负责
JAVA_HOME
/jre/lib
下的类的加载,可以通过参数
-Xbootclasspath制定需要装入的
jar包。
它本身不是用
java实现的,所以肯定不是
ClassLoader的子类了。
Extendsion ClassLoader:扩展类加载器,用来加载一些扩展类,主要负责
JAVA_HOME
/jre/lib/ext
下类的加载。此类是
ClassLoader的一个子类。
System ClassLoader:系统类加载器
也叫
Application ClassLoader
。是离我们最近的
ClassLoader了,它负责加载
CLASSPATH里指定的那些类。我们要实现自己的
ClassLoader也是继承自该类。
SystemClassLoader的父类是
Extension ClassLoader。
类的加载过程分两步:第一步:从下往上查找类是否已经加载,如果找到,直接返回已加载的类,如果没找着接着往上找。第二步:如果到
Bootstrap ClassLoader还没找到,这时
Bootstrap ClassLoader会尝试加载该类,如果成功加载,直接返回加载后的类,如果无法加载,交由
Extension ClassLoader去加载,依次类推。如果最后仍然没找到,程序会抛出
ClassNotFoundException.
2 链接:
当一个
class文件被成功加载后,接下来就要做链接了。链接就是要把二进制的
.class文件转换成可以被
jvm执行的
Class对象的过程。这个过程又分为:检验、准备、解析。
检验:就是检查
.class的结构是否正确,是否符合
Java虚拟机的语义要求。
准备:包括创建类或接口的静态域以及把这些静态域初始化为标准的缺省值。注意此处的初始化不同于后面的的初始化步骤。如有一个
static的
String 变量
str,我们知道,在
JAVA中
String变量默认的初始值是
null,此处的初始化就是将
null赋值给
str。
解析:将类中对另一个类或接口的符合引号转化成全限定名引用,将对他们的方法、字段的符合引用转化成直接引用。
3 初始化:执行类或接口中的静态初始化函数(块),将静态变量初始化。这就是我们平时理解的对静态变量赋值。
至此,一个类才加载完成,可以调用类的类变量了(静态变量)和对类进行实例化了。
以上结合java虚拟机规范及网络相关资料整理而成。
相关推荐
#### 二、JVM加载Class文件的过程分析 在深入探讨之前,我们首先了解Java类加载器(ClassLoader)的基本概念。Java类加载器是JVM的重要组成部分之一,它负责查找并加载类文件到JVM的内存空间中。Java程序的运行依赖...
JVM加载class文件的原理机制 JVM加载class文件的原理机制是Java中的核心机制之一,由于Java中的所有类必须被装载到JVM中才能运行,这个装载工作是由JVM中的类装载器完成的。类装载器所做的工作实质是把类文件从硬盘...
JVM加载class文件的原理机制 JVM加载class文件的原理机制是Java虚拟机中一个非常重要的组件,负责将class文件加载到内存中,以便Java程序的执行。下面是JVM加载class文件的原理机制的详细介绍: 类加载的原理 在...
JVM加载class文件的原理机制JVM加载class文件的原理机制 JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加
JVM类加载过程 JVM(Java Virtual Machine)是Java语言的核心组件之一,它是Java语言的可移植性和跨平台性的基础。JVM主要组成部分包括类加载子系统、执行引擎、本地方法接口和运行时数据区。 类加载子系统是JVM的...
### JVM实战-JVM类加载机制案例分析 #### 实验背景与目标 本次实验的主要目的是深入理解Java虚拟机(JVM)中的类加载机制。通过实践操作,掌握类的加载、连接与初始化过程,了解不同类型的类加载器及其工作原理,...
JVM-CLASS文件分析脑图的知识点涵盖了...通过分析这些结构,我们可以了解class文件如何组织Java类或接口的数据和代码,以及如何被JVM加载和执行。这些知识点对于理解Java字节码以及进行相关的开发和分析工作至关重要。
通过重写 `findClass()` 方法,我们可以打印出加载类的路径,从而跟踪加载过程。这将显示类是如何按照双亲委派模型逐级传递的。 1.4 Java 程序动态扩展方式 Java 程序的动态扩展主要依赖于类加载器的灵活性。用户...
《JVM类加载分析》 Java虚拟机(JVM)是Java程序运行的核心,而类加载机制则是JVM实现程序动态加载和执行的关键部分。在深入理解Java虚拟机的工作原理时,类加载机制是一个不可忽视的重要知识点。这篇博客将探讨JVM...
例如,通过使用VisualVM(压缩包中的visualvm_14可能是一个VisualVM的版本),我们可以监控和分析JVM的类加载行为,包括类加载时间、内存占用等,从而帮助我们更好地调试和优化应用。VisualVM提供了丰富的功能,如...
Java热加载Class文件是开发者在调试和优化代码时非常实用的一种技术,它允许开发者在不重启JVM的情况下更新和替换已加载的类,极大地提高了开发效率。本文将深入探讨Java热加载Class文件的相关知识点。 首先,理解...
总结来说,JVM是Java编程的重要组成部分,它的启动过程涉及到类加载、验证、准备、解析和初始化等多个阶段。理解这些原理有助于我们更好地编写和调试Java代码,提升程序性能。通过深入研究JVM,开发者可以更好地解决...
以上步骤概括了动态编译字符串成Java并加载到JVM的过程。这个技术虽然强大,但也需要注意安全问题,因为它允许运行时生成和执行代码,可能带来潜在的安全风险。此外,对于大型应用,频繁的动态编译可能会对性能造成...
总的来说,JVM解析编译过的class文件是一个复杂的过程,涉及众多细节。开发者不仅要理解编译过程,还需要熟悉JVM的内部机制,才能更好地驾驭这个强大的平台。通过阅读相关博文,如给定的链接,可以进一步深入了解...
总之,理解并掌握如何使用ClassLoader动态加载Class是Java开发中的重要技能,它能帮助我们构建更灵活、可扩展的系统。在实现过程中,要兼顾性能、安全和可维护性,合理设计类加载策略,确保代码的高效运行。
在Java编程中,类加载器(Class Loader)扮演着至关重要的角色,它负责查找并加载Java类到JVM内存中。本部分我们将深入探讨JVM中的类加载器,特别是根类加载器、扩展类加载器和系统类加载器。 首先,让我们了解类...
首先,我们需要理解Java的类加载过程。JVM(Java虚拟机)采用“双亲委派模型”加载类,即当一个类被加载时,它会首先尝试由启动类加载器(Bootstrap ClassLoader)加载,如果该类不在启动类加载器的路径中,则会委托...
JVM类加载跟踪器,用于排查jar包冲突、类冲突、类版本冲突、NoClassDefFoundError、ClassNotFoundException 等等类加载相关问题的辅助工具
"Jvm性能优化-JVM内存结构原理分析03" Jvm性能优化是Java虚拟机(JVM...Jvm性能优化是一个非常复杂的过程,需要我们从多方面考虑、选择合适的垃圾收集器、类加载器、堆的大小和结构等多方面的因素,以提高Jvm的性能。