大宇java面试系列(二):jvm组成部分
- 1. 说一下 JVM 的主要组成部分?及其作用? 
类加载器(ClassLoader)
- 运行时数据区(Runtime Data Area) 
- 执行引擎(Execution Engine) 
- 本地库接口(Native Interface) 
- 组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。 
- 2. 说一下 JVM 运行时数据区? 
- 不同虚拟机的运行时数据区可能略微有所不同,但都会遵从 Java 虚拟机规范, Java 虚拟机规范规定的区域分为以下 5 个部分: 
- 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成; 
- Java 虚拟机栈(Java Virtual Machine Stacks):用于存储局部变量表、操作数栈、动态链接、方法出口等信息; 
- 本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,而本地方法栈是为虚拟机调用 Native 方法服务的; 
- Java 堆(Java Heap):Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存; 
- 方法区(Methed Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。 
- 3. 说一下堆栈的区别? 
- 功能方面:堆是用来存放对象的,栈是用来执行程序的。 
- 共享性:堆是线程共享的,栈是线程私有的。 
- 空间大小:堆大小远远大于栈。 
- 4. 队列和栈是什么?有什么区别? 
- 队列和栈都是被用来预存储数据的。 
- 队列允许先进先出检索元素,但也有例外的情况,Deque 接口允许从两端检索元素。 
- 栈和队列很相似,但它运行对元素进行后进先出进行检索。 
- 5. 什么是双亲委派模型? 
- 在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。 
- 类加载器分类: 
- 启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库; 
- 其他类加载器: 
- 扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或Java. ext. dirs系统变量指定的路径中的所有类库; 
- 应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。 
- 双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。 
- 6. 说一下类装载的执行过程? 
- 类装载分为以下 5 个步骤: 
- 加载:根据查找路径找到相应的 class 文件然后导入; 
- 检查:检查加载的 class 文件的正确性; 
- 准备:给类中的静态变量分配内存空间; 
- 解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址; 
- 初始化:对静态变量和静态代码块执行初始化工作。 
- 7. 怎么判断对象是否可以被回收? 
- 一般有两种方法来判断: 
- 引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题; 
- 可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。 
- 8. Java 中都有哪些引用类型? 
- 强引用:发生 gc 的时候不会被回收。 
- 软引用:有用但不是必须的对象,在发生内存溢出之前会被回收。 
- 弱引用:有用但不是必须的对象,在下一次GC时会被回收。 
- 虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象,用 PhantomReference 实现虚引用,虚引用的用途是在 gc 时返回一个通知。 
如果您感觉文章对您有所帮助,请让更多人看到!
1.点赞此篇文章,并评论一句!
2.转发此篇文章 给予作者支持!
3.微信搜索 ~ 关注微信公众号:程序员知识码头 获取全套学习资料一份!
微信扫码关注:每天准时发技术文章!还能加入专属的学习交流社群!

大宇java面试系列(二):jvm组成部分的更多相关文章
- 大宇java面试系列(一):jvm垃圾回收
		1. 说一下 JVM 有哪些垃圾回收算法? 标记-清除算法:标记无用对象,然后进行清除回收.缺点:效率不高,无法清除垃圾碎片. 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除 ... 
- 大宇java面试系列(三):Redis常见面试题
		1. Redis 是什么?都有哪些使用场景? 我们先来理解经典的CAP理论: 一致性:是指从数据层面来看的一致性. 可用性:是指从系统层面的可用性. 容错性:是指从网络层面的的容错性. 数据库逐渐从关 ... 
- java‘小秘密’系列(二)---Integer
		java'小秘密'系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java'小秘 ... 
- java程序猿面试系列之jvm专题
		前言 因为疫情的影响,现在都变成金五银六了.为了方便大家,在此开一个程序猿面试系列.总结各大公司所问的问题,希望能够帮助到大家,适合初中级java程序猿阅读. 1. Java类实例化时,JVM执行顺序 ... 
- 面试系列二:精选大数据面试真题JVM专项-附答案详细解析
		公众号(五分钟学大数据)已推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型: ... 
- 【java虚拟机系列】java虚拟机系列之JVM总述
		我们知道java之所以能够快速崛起一个重要的原因就是其跨平台性,而跨平台就是通过java虚拟机来完成的,java虚拟机属于java底层的知识范畴,即使你不了解也不会影响绝大部分人从事的java应用层的 ... 
- java面试系列<4>——IO
		面试系列--javaIO 一.概述 java的IO主要分为以下几类: 磁盘操作:File 字节操作:InputStream 和 OutputStream 字符操作:Reader 和 Writer 对象 ... 
- Java面试系列
		如果你的面试简历是如下这样写的,请务必准备回答下面的所有问题. 面试职位:Java高级工程师 专业技能: (1)牢固掌握Java基础知识,如集合.并发.I/O等,并对Java源码有一定的研究. (2) ... 
- java多线程系列(二)
		对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ... 
随机推荐
- 利用pyecharts将数据可视化
			可视化展示在数据分析领域中是一个至关重要的点,好的可视化展示对我们的结果分析有更好的支持作用. 一.问题 在数据分析的时代里面我们需要将数据的可视化展现出来,更加方便用户的观察.如下图 有些时候我们需 ... 
- PHP array_unshift
			1.函数的作用:在数组的开头插入一个或者多个元素 2.函数的参数: @params array &$array @params mixed $value1 @params mixed ... 
- Codeforces 986B - Petr and Permutations
			Description\text{Description}Description Given an array a[], swap random 2 number of them for 3n or ... 
- tinyxml2
			网上下载tinyxml2:tinyxml2.h和tinyxml2.cpp 加载xml XMLDocument doc; doc.LoadFile("test.xml"); ... 
- 概率图模型(PGM):贝叶斯网(Bayesian network)初探
			1. 从贝叶斯方法(思想)说起 - 我对世界的看法随世界变化而随时变化 用一句话概括贝叶斯方法创始人Thomas Bayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界 ... 
- CodeForces - 1214D B2. Books Exchange (hard version)
			题目链接:http://codeforces.com/problemset/problem/1249/B2 思路:用并查集模拟链表,把关系串联起来,如果成环,则满足题意.之后再用并查集合并一个链,一个 ... 
- 记一次 XxlRpcException:xxl-rpc request timeout at  超时问题
			事件起因 昨天有同事找我到,说他搭建的 XXL-JOB 任务调度系统不能工作了,调用总是出错(服务端返回 500)希望我能帮忙处理一下,不过说实话我也没有搭建过 XXL-JOB 的经验,但是既然同事请 ... 
- codeforce - 13A A.Numbers
			A. Numbers time limit per test 1 second memory limit per test 64 megabytes input standard input outp ... 
- 2018.8.10   python中的迭代器
			主要内容: 1.函数名的使用 2.闭包 3.迭代器 一.函数名的运用 函数名是一个变量,但他是一个特殊的变量,与括号配合可执行函数的变量. 1.函数名的内存地址 def func(): print(' ... 
- 《JavaScript设计模式与开发实践》-- 单例模式
			详情个人博客:https://shengchangwei.github.io/js-shejimoshi-danli/ 原来只是听过设计模式,却不晓得其真面目,今天,终于步入了设计模式学习的殿堂,想想 ... 
