失效链接处理 |
2020q携EJava高W试面试?PDF 下蝲
本站整理下蝲Q?/strong>
链接Q?a target="_blank">https://pan.baidu.com/s/1uDjcJIoZR-EnKVjvKL1AHA
提取码:nrj6
相关截图Q?/strong>
![]()
主要内容Q?/strong>
1. 描述一?JVM 加蝲 Class 文g的原理机?
在面?java 工程师的时候,q道题经常被问到Q故需特别注意?/div>
Java 中的所有类Q都需要由cd载器装蝲?JVM 中才能运行。类?/div>
载器本n也是一个类Q而它的工作就是把 class 文g从硬盘读取到?/div>
存中。在写程序的时候,我们几乎不需要关心类的加载,因ؓq些?/div>
是隐式装载的Q除非我们有Ҏ(gu)的用法,像是反射Q就需要显式的?/div>
载所需要的cR?/div>
Java cȝ加蝲是动态的Q它q不会一ơ性将所有类全部加蝲后再q?/div>
行,而是保证E序q行的基c?像是基类)完全加蝲?jvm 中,至于
其他c,则在需要的时候才加蝲。这当然是Z节省内存开销?/div>
Java 的类加蝲器有三个Q对?Java 的三U类:
三个加蝲器各自完成自q工作Q但它们是如何协调工作呢Q哪一个类该由哪个cd载器?/div>
成呢Qؓ了解册个问题,Java 采用了委托模型机制?/div>
委托模型机制的工作原理很单:当类加蝲器需要加载类的时候,先请C其 Parent(即上一
层加载器)在其搜烦路径载入Q如果找不到Q才在自q搜烦路径搜烦该类。这L序?/div>
实就是加载器层次上自而下的搜索,因ؓ加蝲器必M证基cȝ加蝲。之所以是q种?/div>
Ӟq有一个安全上的考虑Q如果某人将一个恶意的基础cd载到 jvmQ委托模型机制会?/div>
索其父类加蝲器,昄是不可能扑ֈ的,自然׃会将该类加蝲q来?/div>
我们可以通过q样的代码来获取cd载器:注意一个很重要的问题,是 Java 在逻辑上ƈ不存?BootstrapKLoader 的实
体!因ؓ它是?C++~写的,所以打印其内容会得到 null?/div>
前面是对cd载器的简单介l,它的原理机制非常单,是下面几个步骤:
1.装蝲:查找和导?class 文g;
2.q接:
3. 初始?初始化静态变量,静态代码块?/div>
来源Qhttps://www.cnblogs.com/wenjiang/archive/2013/04/26/3044132.html
2. 什么是cd载器Q?/div>
cd载器是一个用来加载类文g的类。Java 源代码通过 javac ~译器编译成c?/div>
文g。然?JVM 来执行类文g中的字节码来执行E序。类加蝲器负责加载文?/div>
pȝ、网l或其他来源的类文g?/div>
3. cd载器有哪些?
有三U默认用的cd载器QBootstrap cd载器、Extension cd载器?/div>
Application cd载器。每U类加蝲器都有设定好从哪里加载类。Bootstrap cd载器负责加蝲 rt.jar 中的 JDK cLӞ它是所有类加蝲器的父加
???Bootstrap c?????????c????Q??????/div>
String.class.getClassLoader() Q??q??null Q????????????/div>
NullPointerException 异常。Bootstrap 加蝲器被UCؓ初始cd载器?/div>
|