Java面试题:类加载器

栏目: Java · 发布时间: 5年前

面试题:类加载器

1. Java类加载器

  • Java源代码.java文件通过编译成字节码.class文件后,需要被加载到 Java 虚拟机的内存空间中使用,这个过程就是类加载。类加载依靠的是Java类加载器
  • Java类加载器是Java运行时环境的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载的,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件的位置与文件系统。

2. JVM的3个默认类加载器

  1. 引导(Bootstrap)类加载器。由原生代码 C语言 编写,不继承java.lang.ClassLoader。负责加载核心Java库,存储在/jre/lib目录中。
  2. 扩展(Extensions)类加载器。用来在指明的目录中加载Java的扩展类。Java虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载Java类。该类由sun.misc.Launcher$ExtClassLoader实现。
  3. Apps类加载器(也称系统类加载器)。根据Java应用程序的类路径来加载Java类。一般来说,Java应用程序的类都是由它来完成加载的,可以通过ClassLoader.getSystemClassLoader()来获取它。该类由sun.misc.Launcher$AppClassLoader来实现。
  • 每一个类加载器都有一个父装载器(parent class loader)。

3. 如何保证一个类被加载一次

  • 全盘负责委托机制
  • 解释:当一个ClassLoader加载一个Class的时候,这个Class所依赖的和引用的其他Class通常也是由这个classloader负责载入的。例如加载一个普通的Demo类,Apps类加载器首先拿到这个类的class文件,先让parent(父)类加载器也就是扩展(Extensions)类加载器处理。扩展(Extensions)类加载器拿到class文件后同样先让parent(父)类加载器处理,也就是引导(Bootstrap)类加载器会先处理属于它应该加载的部分。引导类加载器处理完成后,把剩下的给扩展类加载器。扩展类加载器处理属于它的内容,将剩下的部分交给Apps类加载器,Apps类加载器会加载剩下的全部内容。
  • 每个类加载器只会加载自己负责的部分。
  • 这样每个类只会被加载一次。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

让云落地

让云落地

【美】Michael J. Kavis(迈克尔 J.凯维斯) 著 / 陈志伟、辛敏 / 电子工业出版社 / 2016-3 / 65.00元

云计算落地已成事实。从前几年的概念普及,到如今越来越多的企业将业务迁移至云上,云计算正在改变整个社会的信息资源使用观念和方式。云计算还在不断成长,技术细节也在不断变化之中。对于使用者而言,能够基于自身的业务、技术和组织需求等各方面情况,选择正确的云服务模式,是成功使用云计算最关键的技术决策之一。 《让云落地:云计算服务模式(SaaS、PaaS和IaaS)设计决策》共有 16 章,作者有意避开......一起来看看 《让云落地》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具