栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

jvm面试高频题

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jvm面试高频题

jvm 的主要组成部分?及其作用?

1、类加载器(ClassLoader)
加载类文件到内存。Class loader只管加载
2、运行时数据区(Runtime Data Area)
3、本地库接口(Native Interface)
本地接口的作用是融合不同的语言为java所用
4、执行引擎(Execution Engine)
也叫解释器,负责解释命令,交由操作系统执行

jvm 运行时数据区

1、堆 Heap
堆是java对象的存储区域,任何用new字段分配的java对象实例和数组,jdk1.7以后,运行时常量池从方法区移到了堆上。
2、方法区 Method Area
用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
3、虚拟机栈 VM Stack
4、本地方法栈 Native Method Stack
5、程序计数器 Program Counter Register
指示Java虚拟机下一条需要执行的字节码指令

堆和栈的区别?

栈,存储的是局部变量;
堆,存储的是实体;
栈更新速度比堆快,栈是局部变量,用完即回收
堆需要等到垃圾回收才被回收

队列和栈是什么?有什么区别?

队列和栈都是被用来预存储数据的。
队列 一般先进先出,但也有例外的情况,Deque 接口允许从两端检索元素。
栈 后进先出

类加载器分为

1、启动类加载器(Bootstrap ClassLoader)
是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,
或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库
2、扩展类加载器(Extension ClassLoader)
负责加载libext目录或Java. ext. dirs系统变量指定的路径中的所有类库
3、应用程序类加载器(Application ClassLoader)
负责加载用户类路径(classpath)上的指定类库

双亲委派模型

如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。

类加载的执行过程

1、Loading 加载
根据查找路径找到相应的 class 文件然后导入;

2、linking 连接

Verification 检查:验证文件是否符合JVM规定
Preparation 准备:静态成员变量赋默认值
Resolution 解析:将类、方法、属性等符号引用解析为直接引用
常量池中的各种符号引用解析为指针、偏移量等内存地址的直接引用

3、Initializing 初始化
调用类初始化代码 ,给静态成员变量赋初始值

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321600.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号