Java面试题:类加载器

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

面试题:类加载器

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类加载器会加载剩下的全部内容。
  • 每个类加载器只会加载自己负责的部分。
  • 这样每个类只会被加载一次。

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

查看所有标签

猜你喜欢:

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

Bulletproof Web Design

Bulletproof Web Design

Dan Cederholm / New Riders Press / 28 July, 2005 / $39.99

No matter how visually appealing or packed with content a Web site is, it isn't succeeding if it's not reaching the widest possible audience. Designers who get this guide can be assured their Web site......一起来看看 《Bulletproof Web Design》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试