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 文件的原理机制?的更多相关文章

  1. 【Java面试题】46 描述一下JVM加载class文件的原理机制?

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

  2. 描述一下JVM加载class文件的原理机制

    Java中的所有类,都需要由类加载器装载到JVM中才能运行.类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中.在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的 ...

  3. 描述一下JVM加载class文件的原理机制?

    JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类. 由于Java的跨平台性,经过编 ...

  4. Java面试题系列(一)描述一下JVM加载class文件的原理机制

    JVM系列第4讲:从源代码到机器码,发生了什么? https://www.cnblogs.com/chanshuyi/p/jvm_serial_04_from_source_code_to_machi ...

  5. Java提高篇——JVM加载class文件的原理机制

    在面试java工程师的时候,这道题经常被问到,故需特别注意. 1.JVM 简介 JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后 ...

  6. JVM加载class文件的原理机制(转)

    JVM加载class文件的原理机制 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中 2.java中的 ...

  7. JVM加载class文件的原理机制

    Java中的所有类,都需要由类加载器装载到JVM中才能运行.类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中.在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的 ...

  8. Java加载Class文件的原理机制

    详见:http://blog.sina.com.cn/s/blog_6cbfd2170100ljmp.html 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器 ...

  9. JVM加载class文件的原理

    当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件.那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做[加载 ].加载完成之后,我们就可以进行一系列 ...

随机推荐

  1. Aesop_secret的writeup

    大家好,这次我为大家带来的是攻防世界misc部分Aesop_secret的writeup.    先下载附件,是一个压缩包,紧接着解压,发现一个gif文件.用浏览器打开,注意到这个gif文件播放时每一 ...

  2. proto编译组件使用

    proto编译组件使用 前提:所有组件已经安装好,包括: protoc protoc-gen-go protoc-gen-grpc-gateway protoc-gen-swagger 怎么装再开一篇 ...

  3. 【C# GC】C# GC何时被调用

    首先要指导GC的机制,这部分转载自:http://blog.csdn.net/qq_20949153/article/details/52188882CLR:公共运行时环境,管理托管堆.CTR:设置引 ...

  4. Python:collections.Counter

    collections是Python内建的一个集合模块,其中提供了许多有用的集合类: namedtuple:只有属性的简易类 deque:双向增删的List ChainMap:多个字典的链接 Coun ...

  5. 『现学现忘』Docker相关概念 — 1、云计算概念

    目录 1.云计算的概念 2.示例说明云计算 3.小故事说明云计算 "云计算"这个词,相信大家都非常熟悉. 作为信息科技发展的主流趋势,它频繁地出现在我们的眼前.伴随它一起出现的,还 ...

  6. vue electron 运行时报错Cannot find module 'fs/promises'的解决方法

    项目已经上线半年了,全省多地使用,突然出现的问题,最后发现是因为使用的 electron-updater 因为版本号没有锁定,突然之间就报了上面的错误,不管我怎么升级node都没用(哈哈,node本身 ...

  7. 探索TiDB Lightning的源码来解决发现的bug

    背景 上一篇<记一次简单的Oracle离线数据迁移至TiDB过程>说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程. Oracle源库中表名都是大 ...

  8. Git更新本地仓库及冲突"Commit your changes or stash them before you can merge"解决

    Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit log  ...

  9. 面试题详解:如何用Redis实现分布式锁?

    说一道常见面试题: 使用Redis分布式锁的详细方案是什么? 一个很简单的答案就是去使用 Redission 客户端.Redission 中的锁方案就是 Redis 分布式锁的比较完美的详细方案. 那 ...

  10. windows2008R2重建索引

    windows索引服务 索引服务是一项系统服务(Indexing Service),使用文档筛选器读取整个文档,并提取文档和属性传递给索引程序,这个过程称为"索引".索引服务可以从 ...