大厂真题之携程-Java高级
VIP免费
2024-12-10
3
0
680.68KB
18 页
5.9玖币
侵权投诉
1. 描述一下 JVM 加载 Class 文件的原理机制?
在面试 java 工程师的时候,这道题经常被问到,故需特别注意。
Java 中的所有类,都需要由类加载器装载到 JVM 中才能运行。类加
载器本身也是一个类,而它的工作就是把 class 文件从硬盘读取到内
存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都
是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加
载所需要的类。
Java 类的加载是动态的,它并不会一次性将所有类全部加载后再运
行,而是保证程序运行的基础类(像是基类)完全加载到 jvm 中,至于
其他类,则在需要的时候才加载。这当然就是为了节省内存开销。
Java 的类加载器有三个,对应 Java 的三种类:
三个加载器各自完成自己的工作,但它们是如何协调工作呢?哪一个类该由哪个类加载器完
成呢?为了解决这个问题,Java 采用了委托模型机制。
委托模型机制的工作原理很简单:当类加载器需要加载类的时候,先请示其 Parent(即上一
层加载器)在其搜索路径载入,如果找不到,才在自己的搜索路径搜索该类。这样的顺序其
实就是加载器层次上自顶而下的搜索,因为加载器必须保证基础类的加载。之所以是这种机
制,还有一个安全上的考虑:如果某人将一个恶意的基础类加载到 jvm,委托模型机制会搜
索其父类加载器,显然是不可能找到的,自然就不会将该类加载进来。
我们可以通过这样的代码来获取类加载器:
注意一个很重要的问题,就是 Java 在逻辑上并不存在 BootstrapKLoader 的实
体!因为它是用 C++编写的,所以打印其内容将会得到 null。
前面是对类加载器的简单介绍,它的原理机制非常简单,就是下面几个步骤:
1.装载:查找和导入 class 文件;
2.连接:
3. 初始化:初始化静态变量,静态代码块。
来源:https://www.cnblogs.com/wenjiang/archive/2013/04/26/3044132.html
2. 什么是类加载器?
类加载器是一个用来加载类文件的类。Java 源代码通过 javac 编译器编译成类
文件。然后 JVM 来执行类文件中的字节码来执行程序。类加载器负责加载文件
系统、网络或其他来源的类文件。
3. 类加载器有哪些?
有三种默认使用的类加载器:Bootstrap 类加载器、Extension 类加载器和
Application 类加载器。每种类加载器都有设定好从哪里加载类。
Bootstrap 类加载器负责加载 rt.jar 中的 JDK 类文件,它是所有类加载器的父加
载器。Bootstrap 类加载器没有任何父类加载器,如果你调用
String.class.getClassLoader() , 会 返 回 null , 任 何 基 于 此 的 代 码 会 抛 出
NullPointerException 异常。Bootstrap 加载器被称为初始类加载器。
而 Extension 将加载类的请求先委托给它的父加载器,也就是 Bootstrap,如果
没有成功加载的话,再从 jre/lib/ext 目录下或者 java.ext.dirs 系统属性定义的
目录下加载类。Extension 加载器由 sun.misc.Launcher$ExtClassLoader 实现。
第三种默认的加载器就是 Application 类加载器了。它负责从 classpath 环境变
量中加载某些应用相关的类,classpath 环境变量通常由-classpath 或-cp 命令
行选项来定义,或者是 JAR 中的 Manifest 的 classpath 属性。Application 类
加 载 器 是 Extension 类 加 载 器 的 子 加 载 器 。 通 过
sun.misc.Launcher$AppClassLoader 实现。
4. 什么是 tomcat 类加载机制?
在 tomcat 中类的加载稍有不同,如下图:
当 tomcat 启动时,会创建几种类加载器:
1 Bootstrap 引导类加载器
加载 JVM 启动所需的类,以及标准扩展类(位于 jre/lib/ext 下)
2 System 系统类加载器
加 载 tomcat 启 动 的 类 , 比 如 bootstrap.jar , 通 常 在 catalina.bat 或 者
catalina.sh 中指定。位于 CATALINA_HOME/bin 下。
3 Common 通用类加载器
摘要:
展开>>
收起<<
1.描述一下JVM加载Class文件的原理机制?在面试java工程师的时候,这道题经常被问到,故需特别注意。Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。Java的类加载器有三个,对应Java的三种类...
声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
相关推荐
-
工程建设招标投标合同(附件)VIP免费
2024-11-15 16 -
工程建设招标投标合同(动员预付款银行保证书)VIP免费
2024-11-15 11 -
工程建设招标设标合同条件(第1部分)VIP免费
2024-11-15 11 -
工程建设招标设标合同合同条件(第3部分)VIP免费
2024-11-15 10 -
工程建设招标设标合同合同条件(第2部分)VIP免费
2024-11-15 13 -
工程建设监理委托合同VIP免费
2024-11-15 14 -
工程建设监理合同标准条件VIP免费
2024-11-15 11 -
工程技术资料目录VIP免费
2024-11-15 13 -
工程技术咨询服务合同VIP免费
2024-11-15 13 -
工程建设招标投标合同(投标邀请书)VIP免费
2024-11-15 35
分类:计算机
价格:5.9玖币
属性:18 页
大小:680.68KB
格式:PDF
时间:2024-12-10


渝公网安备50010702506394