美文网首页
类加载子系统

类加载子系统

作者: qwerdf0929 | 来源:发表于2022-01-18 17:10 被阅读0次

JVM架构图

image-20200705080911284.png

类加载器ClassLoader

  1. 作用:将class file加载到JVM中,被称为DNA元数据模板,放在方法区。
  2. 通过DNA元数据模板(Class对象)的getClassLoader()可以获取类加载器,通过getClass()方法可以实例化对象
  3. 加载过程:加载、链接、初始化

加载过程

  1. 通过类的全限定名获取类的二进制字节流

    读取class文件的方式:

    1. 磁盘加载
    2. 网络获取:web applet
    3. 压缩包读取:jar、war
    4. 运行时计算生成: 动态代理
    5. 其他文件生成:jsp
  2. 将字节流所代表的静态存储结构转化为方法区的运行时数据结构

    类完成加载后,二进制字节流就以特定的数据结构存储在方法区中,但存储的数据结构是由虚拟机自己定义的,虚拟机规范并没有指定

  3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
    • 既然是对象就应该存放在Java堆中,不过JVM规范并没有给出限制,不同的虚拟机根据自己的需求存放这个对象。
    • HotSpot将Class对象存放在方法区。

链接过程

  1. 验证
  • 确保字节流符合jvm要求
  • 文件格式验证、元数据验证、字节码验证、符号引用验证
  1. 准备
  • 为类变量分配内存并设置默认初始值,即0
  • 不包含用final修饰的static,则为常量, 在编译的时候就会分配了
  • 这里不会为实例变量分配内存,因为实例变量会随着具体对象分配到堆中
  1. 解析

将常量池中的符号引用转换为直接引用的过程

初始化过程

  1. 执行类构造器方法<clinit>()的过程
  2. clinit方法不需要定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来的
  3. clinit中的指令按照语句在源文件中出现顺序执行

字节码文件组成

  1. 魔数 :cafe babe

相关文章

  • JVM(四)JVM加载机制详解

    1 类加载子系统 1.1 类加载子系统介绍 1.类加载子系统负责从文件系统或是网络中加载.class文件,clas...

  • 类加载

    类加载子系统:在Java虚拟机中,负责查找并装载类的部分称为类加载子系统,类加载子系统用于定位和加载编译后的cla...

  • JVM系列二(类加载器子系统)

    Java虚拟机(JVM)系列二 类加载子系统 一.类加载器子系统整体架构 类加载器子系统负责从文件或网络中加载Cl...

  • JVM类加载器子系统ClassLoader

    1 类加载器与类的加载过程 类加载器子系统的作用:类加载子系统负责从文件或者网络中加载class文件,class文...

  • 一、类加载器与类的加载过程

    一、内存结构概述 二、类加载器与类的加载过程 1、类加载子系统作用 类加载子系统负责从文件系统或者网络中加载Cla...

  • 从不同的角度教你类加载子系统,十分钟看懂!不来看看?

    类文件首先需要经过类加载子系统,进行加载,进类信息等加载到运行时数据区,生成Klass的实例。 在类加载子系统中有...

  • Java虚拟机架构?面试的时候懵了吧,作为过来人给你们讲讲

    JVM被分为三个主要的子系统:类加载器子系统、运行时数据区、执行引擎 类加载器子系统 Java的动态类加载功能是由...

  • Java虚拟机的基本结构

    Java虚拟机的基本结构 类加载子系统 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于...

  • JVM整体结构

    1、类加载子系统 : 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内...

  • JVM优化

    1、JVM结构图 1.1 类加载子系统与方法区:类加载子系统负责从文件系统或者网络中加载 Class 信息,加载的...

网友评论

      本文标题:类加载子系统

      本文链接:https://www.haomeiwen.com/subject/rhukhrtx.html