精华内容
下载资源
问答
  • JVM 中类的装载是由类加载器( ClassLoader)和它的子类来实现的, Java 中的类加载器是一...类的加载是指把类的.class 文件中的数据读入到内存中,通常是创建一个字节数组读入.class 文件,然后产生与所加载类对应的C

    JVM 中类的装载是由类加载器( ClassLoader)和它的子类来实现的, Java 中的类加载器是一个重要的Java 运行时系统组件,它负责在运行时查找和装入类文件中的类。

    由于Java 的跨平台性, 经过编译的Java 源程序并不是一个可执行程序, 而是一个或多个类文件。当Java 程序需要使用某个类时,JVM 会确保这个类已经被加载、连接( 验证、准备和解析)和初始化。类的加载是指把类的.class 文件中的数据读入到内存中,通常是创建一个字节数组读入.class 文件,然后产生与所加载类对应的Class 对象。加载完成后,Class 对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备( 为静态变量分配内存并设置默认的初始值)和解析( 将符号引用替换为直接引用)三个步骤。最后JVM 对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类; 2)如果类中存在初始化语句, 就依次执行这些初始化语句。

    类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器( System)和用户自定义类加载器(java.lang.ClassLoader 的子类) 。从Java 2( JDK 1.2)开始, 类加载过程采取了父亲委托机制(PDM)。PDM 更好的保证了Java 平台的安全性,在该机制中, JVM 自带的Bootstrap 是根加载器, 其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载, 父类加载器无能为力时才由其子类加载器自行加载。JVM 不会向Java 程序提供对Bootstrap 的引用。

    下面是关于几个类加载器的说明:

    • Bootstrap:一般用本地代码实现,负责加载JVM 基础核心类库(rt.jar);
    • Extension:从java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;
    • System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath 或者系统属性java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。
    展开全文
  • JVM加载class文件原理机制 JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。 由于Java的跨平台性,经过...

    JVM加载class文件的原理机制

    JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。
    由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。
    类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。从Java 2(JDK 1.2)开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。
     

    本题涉及java知识点分析

    Java虚拟机JVM

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
    JVM主要是通过在实际计算机模仿各种计算机功能来实现的,组成部分包括堆、方法区、栈、本地方法栈、程序计算器等部分组成的,其中方法回收堆和方法区是共享区,也就是谁都可以使用,而栈和程序计算器、本地方法栈区是归JVM的。Java能够被称为“一次编译,到处运行”的原因就是Java屏蔽了很多的操作系统平台相关信息,使得Java只需要生成在JVM虚拟机运行的目标代码也就是所说的字节码,就可以在多种平台运行。

    类装载器(ClassLoader)

    类装载器(ClassLoader)主要负责加载class文件,是否能执行主要取决于execution engine它是负责执行被加载类中包含的指令。有两种类加载器分别为启动类加载器和用户自定义类加载器,然而启动类加载器是JVM实现的一部分,用户自定义类加载器是Java程序一部分。

    希望能对大家有所帮助。

    展开全文
  • 本文描述了JVM的组成部分,以及JVM中类加载器加载class文件原理机制

    1、JVM组成

    JVM 全称是Java Virtual Machine ,翻译过来就是Java 虚拟机,下图是JVM的组成部分。

    • Class Loader(类加载器):类加载器本身也是一个类。当Java源代码(.java)经过javac的编译之后变成了字节码(.class),字节码会进入JVM的类加载器。但是,并不是所有的字节码文件进入类加载器之后都会被加载,而是必须符合class文件的格式要求才会被加载。但是加载之后能不能运行就不是类加载器的负责部分了。
    • Runtime Data Area(运行数据区):
      • PC Register(程序计数器):这部分是一块较小的内存空间,它可以被看成当前线程所执行的字节码的行号指示器。简单来说,就是为了保证程序的正确运行。当存在多线程时,CPU将线程A挂起并且去执行线程B,然后又回来执行线程A,此时CPU怎么知道之前该线程执行到哪里呢?因此,我们需要给每个线程都分配一个程序计数器,来记录该线程执行到的字节码行数,因此,每个程序计数器都是线程私有的。
      • Stack(Java虚拟机栈):Java虚拟机栈是线程私有的,生命周期与线程相同。它的存在是为了存储字节码文件解释时Java方法产生的内存模型。每个方法被执行时都会产生一个栈帧,存储局部变量表、操作栈、动态链接、方法出口。每个方法被调用到执行完成的过程,就相当于该栈帧在Java虚拟机栈从入栈到出栈的一次过程。
      • Heap(Java虚拟机堆):Java虚拟机堆是虚拟机内存中最大的一部分,它在JVM启动时创建,被所有线程所共享。它负责存放对象实例,而Java的GC机制主要管理的也就是Java虚拟机堆。Java虚拟机堆在物理上可以不连续,逻辑上连续即可。
      • Method Area(方法区):**方法区域Java虚拟机堆一样,是线程共享的,并且也是可以在物理上不连续,逻辑上连续即可。**这个区域存储一些已经被JVM加载的类信息、常量、静态变量等。方法区包括Runtime Constant Pool(运行时常量池),它是用于保存 Class 文件中的符号引用、翻译出来的直接引用。
      • Native Method Stack(本地方法栈):**本地方法栈也是线程私有的。**与Java虚拟机栈类似,只不过Java虚拟机栈中的方法是字节码文件解释时产生的Java方法,而本地方法栈中的方法是本地方法。
    • Execution Engine(执行引擎):我们知道Java的跨平台性是因为JVM的存在,JVM中执行引擎的作用就相当于解释器,将字节码文件解释成机器码。
    • Native Interface(本地库接口):当执行引擎在解释时,需要加载一些基本类库,本地库接口的作用就是提供基本类库的接口给其引用。

    2、JVM加载class文件的原理机制

    了解了JVM的组合和体系,我们就很容易理解JVM加载class文件的原理机制

    类加载器加载过程:

    • 装载和导入字节码文件
    • 链接:
      • 检查:检查字节码文件的格式
      • 准备:为类的静态变量分配内存
      • 解析:将符号引用转化成直接引用
    • 初始化:初始化静态变量,静态代码块
    展开全文
  • JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。...类的加载是指把类的.class文件中的数据读...

    JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。

    由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。

    类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。      从Java2(JDK 1.2)开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明:

    Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar);

    Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;

    System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。

    展开全文
  • JVM加载class文件

    2021-11-21 18:37:22
    文章目录一、JVM加载class文件原理二、JVM加载class文件的机制 一、JVM加载class文件原理 原理: 1、JVM中类的加载是由类加载器(ClassLoader)和其子类来实现的。 2、java中的类加载器是一个重要的java运行时系统...
  • 1、JVM简介JVM是我们Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibernate等等,再然后就开发企业级的应用,比如网站...
  • JVM加载class文件原理1、JVM加载类的过程2、类装载器体系结构3、双亲委托模型4、一个经典的实例说明 当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件。那么最开始的工作就是要把字节码从...
  • 当运行指定程序时,JVM会将编译生成的.class文件按照需求和一定的规则加载到内存中,并组织成为一个完整的Java应用程序。这个加载过程是由类加载器完成,具体来说,就是由ClassLoader和它的子类来实现的。类加载器...
  • JVM系列第4讲:从源代码到机器码,发生了什么?https://www.cnblogs.com/chanshuyi/p/jvm_serial_04_from_source_code_to_machine_code.html线程安全(上)--彻底搞懂volatile关键字...
  • 1、JVM简介JVM是我们Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibernate等等,再然后就开发企业级的应用,比如网站...
  • JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后会写个复杂点class ,然后再找一些开源框架,比如Spring ,Hibernate 等等,再然后就开发企业级的应用,比如网站、...
  • java一、JVM简介JVM是咱们Javaer的最基本功底了,刚开始学Java的时候,通常都是从“Hello World”开始的,而后会写个复杂点class,而后再找一些开源框架,好比Spring,Hibernate等等,再而后就开发企业级的应用,...
  • 当运行指定程序时,JVM会将编译生成的.class 文件按照需求和一定的规则加载到内存中,并组织成为一个完整的Java应 用程序。这个加载过程是由类加载器完成,具体来说,就是由 ClassLoader和它的子类来实现的。类加载...
  • 1 JVM架构整体架构在进入classloader分析之前,先了解一下jvm整体架构:JVM架构JVM被分为三个主要的子系统(1)类加载器子系统(2)运行时数据区(3)执行引擎1. 类加载器子系统Java的动态类加载功能是由类加载器子系统...
  • 首先要知道JVM是啥其次知道JVM的组成再来看加载class文件原理 首先要知道JVM是啥 JVM就是在计算机上再虚拟一个计算机,和VMWare不一样,VMWare你是可以看到的,而JVM你是看不到的,它存在内存中。计算机的基本构成...
  • JVM 中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java 中的 类加载器是一个重要的...类的加载是指把类的.class 文件中的数据读 入到内存中,通常是创建一个字节数组读入.class 文件,然后产生与所加载
  • JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,...类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Cl
  • JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。...类的加载是指把类的.class文件中的数据读...
  • JVM的类加载原理

    2021-07-29 15:21:14
    一、什么是类加载器(ClassLoader) 类加载器是指在系统运行过程中...首先 Java 源代码(.java)文件会被 Java 编译器编译为字节码(.class)文件,然后由 JVM 中的类加载加载各个类的字节码文件加载完毕之后,交由 JV.
  • JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。...类的加载是指把类的.class文件中的数据读...
  • 考虑后面需要经常用到 asm 字节码插桩,我们首先从 《Gradle 插件 + ASM 实战》开始讲,但又希望大家能知其然也知其所以然,因此我们首先得讲下 JVM 虚拟机加载 Class 字节码的原理。这往往也是我面试新同学必问的一...
  • 1、《【JVM】JVM加载class文件原理机制》:https://blog.csdn.net/renjingjingya0429/article/details/88525915 2、《JVM加载class文件原理机制》:https://www.imooc.com/article/21124
  • 详见:http://blog.sina.com.cn/s/blog_6cbfd2170100ljmp.html1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中2.java中...
  • 文章目录1 class对象详解2 Class.forName和ClassLoader.loadClass区别2.1 jvm加载class步骤2.2 两种方式的详细方法2.3 两种方式的区别2.4 举例说明他们各自的使用方法 1 class对象详解 java中把生成Class对象和实例...
  • 如同讲汇编必先讲计算机组成原理,在开始字节码之前,我们先了解一下JVM的主要构成。 在JVM的内部,主要由如下几个部分构成:1.数据区方法区:存放类定义信息、字节码、常量等数据,在Sun HotSpot JVM中,这块也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,158
精华内容 26,863
关键字:

jvm加载class文件的原理