一、定义:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。
与需要在编译时进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。
二、类加载的时机
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3个部分称为连接(Linking)。
1)遇到new、getstatic、putstatic、invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。常见的Java代码场景为:new、读取或设置一个类的静态字段(被final修饰,已在编译期把结果放入常量池的静态字段除外),以及调用一个类的静态方法的时候。
2)使用java.lang.relect包中的方法对类进行反射调用。
3)初始化一个类的时候,如果其父类还没有进行初始化,则需要先触发其父类的初始化。
4)虚拟机启动,需要先指定一个要执行的主类(包含main方法的那个类),虚拟机会先初始化这个主类。
5)使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则需要先触发其初始化。
注意:
1、通过数组定义来引用类、不会触发此类的初始化。
2、常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发定义常量类的初始化。
三、类加载的过程
加载(将二进制加载到内存,访问入口设置)->验证(防篡改)->准备(在方法区内为类变量分配内存并设置初始值)->解析(将符号引用替换为直接引用)->初始化(执行构造器,初始化对象)
分享到:
相关推荐
Java虚拟机(JVM)的类加载过程是Java程序运行的基础,它涉及到类加载器、类的生命周期和一系列复杂的步骤。在这个过程中,类加载器主要任务是根据类的全限定名加载二进制字节流并转化为`java.lang.Class`对象。整个...
Java中的类加载器是JVM(Java虚拟机)的核心组件之一,它们负责将.java源代码编译成的.class字节码文件加载到JVM中,从而使得程序能够运行。类加载器不仅涉及到程序的正常执行,还与Java的动态加载、模块化系统以及...
**类加载器(ClassLoader)**是Java虚拟机(JVM)中的一个重要组成部分,它负责将编译好的`.class`文件加载到JVM中,使得这些类可以在Java环境中运行。类加载器不仅能够加载类,还能够根据不同的需求定制加载方式,如从...
在Java开发中,JVM(Java虚拟机)的类加载机制是至关重要的,因为它负责将类的字节码转换为运行时的实例。本专题"性能调优专题-jvm类加载机制-performance-jvmclassloader"深入探讨了如何通过理解并优化类加载过程来...
类加载机制不仅涉及到类的加载、验证、准备、解析和初始化等步骤,还包括类加载时机的选择及类加载器的具体工作原理等内容。 #### 一、类加载时机 Java类的生命周期主要包括以下几个阶段:加载、验证、准备、解析...
类加载器在Java虚拟机中扮演着非常重要的角色,它们负责加载程序所需的类: 1. **类型**: - **Java虚拟机自带的加载器**: - **根类加载器(Bootstrap ClassLoader)**:负责加载Java核心库(如`rt.jar`)。 - ...
4. **类加载机制**:JVM如何找到并加载类,包括类加载器、双亲委托模型、类加载的时机等。掌握这些可以避免类加载冲突,实现更灵活的类加载策略。 5. **运行时数据区**:包括堆内存、栈内存等,其中堆主要存储对象...
类加载器是Java虚拟机(JVM)的重要组成部分,它负责将类的字节码从文件系统或网络中加载到JVM中,并转换为运行时的java.lang.Class对象。类加载器不仅涉及程序的启动,还关系到类的动态加载、类间的隔离以及安全性...
类加载机制负责将描述类的数据从`.class`文件加载到内存,并进行必要的校验、转换解析和初始化,使之成为可以被Java虚拟机直接使用的Java类型。根据Java虚拟机规范的规定,在以下几种情况下必须对类进行初始化: 1....
理解类加载器的工作原理对于深入掌握Java虚拟机(JVM)运行机制和进行高效的问题排查至关重要。在这个主题中,我们将详细探讨类加载器的加载过程、双亲委派模型以及自定义类加载器。 一、类加载的时机 类加载通常...
- **定义**:类的加载机制是指Java虚拟机如何将类的.class文件读入内存,并对数据进行校验、转换解析和初始化的过程。 - **三个阶段**:加载、链接(验证、准备、解析)、初始化。 - **类加载器体系**:包括启动类...
综上所述,《深入Java虚拟机》这本书不仅涵盖了Java虚拟机的基本概念和技术细节,还深入探讨了JVM如何实现跨平台特性、安全机制、内存管理等方面的知识,对于希望深入了解Java底层实现机制的开发者而言是一本...
方法区是 JVM 中的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区是各个线程共享的内存区域。 4. 程序计数器(Program Counter Register) 程序计数器是一块较...
第93节类加载器00:22:41分钟 | 第94节双亲委派模型00:17:03分钟 | 第95节运行时栈帧结构00:08:46分钟 | 第96节局部变量表00:20:48分钟 | 第97节操作数栈00:08:36分钟 | 第98节动态连接00:02:56分钟 | 第99节...
Java 类加载机制是Java虚拟机(JVM)的核心组成部分,负责将类的定义从Class文件加载到内存,并对其进行校验、解析和初始化。这个过程确保了程序运行时能够正确使用类的静态和动态特性。本文将深入探讨Java类加载的...
Java类加载器、反射机制和模块化 一、类加载器 1.1 类加载机制 类加载是指将.class文件读入内存,并为之创建一个java.lang.Class对象。任何类被使用时,系统都会为之建立一个java.lang.Class对象。类加载机制分为...
此外,书中详细讲解了JVM的类加载机制,包括类加载的时机、过程和双亲委托模型,这对于理解和实现自定义类加载器至关重要。同时,作者还会探讨类与接口的关系、类的初始化以及类加载器的生命周期,这些都是理解Java...
Java 类加载过程是Java虚拟机(JVM)在运行时动态加载类的机制,它涉及类的生命周期中的几个关键步骤,包括装载、连接、初始化和卸载。下面将详细阐述这些过程。 1. 装载 装载阶段是类加载的起始点,主要分为三个...
### 类加载器与双亲委派模型详解 #### 类的生命周期与加载过程 ...总的来说,Java中的类加载机制是十分复杂的,涉及到多个阶段和多种类加载器之间的交互。正确理解和掌握这些机制对于开发高效稳定的Java应用至关重要。