大厂真题之携程-Java高级

VIP免费
2024-12-10 1 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的三种类...

展开>> 收起<<
大厂真题之携程-Java高级.pdf

共18页,预览4页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:18 页 大小:680.68KB 格式:PDF 时间:2024-12-10

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 18
客服
关注