返回

jvm类加载器就做了一件事-1

后端

引言

作为java开发人员,我们都知道java是一门跨平台的语言,那java代码是如何跨平台的呢?其实答案就在java虚拟机(JVM)上。java虚拟机将java代码编译成字节码(一种平台无关的指令集),然后由类加载器加载字节码并转换成可执行的机器码,最后JVM解释执行这些机器码。在java代码执行的整个过程中,类加载器扮演着重要的角色,它决定了哪些类会被加载、什么时候被加载,以及如何被加载。

JVM类加载器概览

类加载器是一个将类从磁盘加载到JVM的方法。它将字节码加载到JVM中并将其转换成机器码,从而使得类可以被执行。在JVM中,有三种类型的类加载器:

  • 启动类加载器(Bootstrap ClassLoader):这是JVM的根类加载器,它负责加载Java的核心库,如java.lang包和java.util包。
  • 扩展类加载器(Extension ClassLoader):它负责加载Java扩展库,如java.sql包和javax.xml包。
  • 系统类加载器(System ClassLoader):它负责加载用户定义的类,如我们自己编写的java类。

JVM类加载过程

类加载过程是一个相对复杂的过程,它涉及到多个步骤。下面我们将详细介绍一下类加载的过程:

  1. 类查找:当JVM需要加载一个类时,它首先会查找该类是否已经被加载过。如果该类已经被加载过,那么JVM会直接返回该类的引用。否则,JVM会继续进行后续的步骤。
  2. 类加载:如果类没有被加载过,那么JVM会根据类的全限定名来查找该类的字节码文件。字节码文件通常存储在.class文件中。JVM找到字节码文件后,会将其加载到JVM中。
  3. 类验证:在类加载完成后,JVM会对类进行验证。类验证主要包括以下几个步骤:
    • 文件格式验证:JVM会检查类文件是否符合Java虚拟机的规范。
    • 字节码验证:JVM会检查类文件中的字节码指令是否合法。
    • 符号引用验证:JVM会检查类文件中的符号引用是否指向已加载的类。
  4. 类准备:在类验证通过后,JVM会为类分配内存并初始化类的静态变量。
  5. 类解析:在类准备完成后,JVM会解析类文件中的符号引用。符号引用是指对其他类的引用,如继承、实现或方法调用。
  6. 类初始化:在类解析完成后,JVM会对类进行初始化。类初始化主要包括以下几个步骤:
    • 执行类的静态代码块:静态代码块是类加载时自动执行的代码块,它通常用于初始化类的静态变量。
    • 调用类的构造方法:JVM会调用类的构造方法来初始化类的实例变量。

结语

类加载器是JVM的核心组件之一,它负责将类加载到JVM中并将其转换成可执行的机器码。类加载过程是一个相对复杂的过程,它涉及到多个步骤。掌握类加载的过程对于理解Java代码是如何执行的非常重要。