我的编程空间,编程开发者的网络收藏夹
学习永远不晚

技术面试题分享:含答案的10道Jvm面试专题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

技术面试题分享:含答案的10道Jvm面试专题

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。

Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。下面,陕西优就业小编给大家分享十道题,大家可以尝试着回答一下以下问题:

技术面试题分享:含答案的10道Jvm面试专题

qunhao:    838     940     752

一、内存模型以及分区,需要详细到每个区放什么。

(1)JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面, class 类信息常量池(static 常量和 static 变量)等放在方法区 new:

(2)方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字 节码)等数据 · 堆:初始化的对象,成员变量(那种非 static 的变量),所有的对象实例和数组都要 在堆上分配

(3)栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操 作数栈,方法出口等信息,局部变量表存放的是 8 大基础类型加上一个应用类型,所 以还是一个指向地址的指针

(4)本地方法栈:主要为 Native 方法服务

(5)程序计数器:记录当前线程执行的行号

二、简述java垃圾回收机制?

在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的。

只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。

三、什么是类加载器,类加载器有哪些?

实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。

主要有一下四种类加载器:

(1)启动类加载器(Bootstrap ClassLoader)用来加载java核心类库,无法被java程序直接引用。

(2)扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。

(3)系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。

(4)用户自定义类加载器,通过继承 java.lang.ClassLoader类的方式实现。

四、GC 的两种判定方法

(1)引用计数法:指的是如果某个地方引用了这个对象就+1,如果失效了就-1,当为 0 就会回收但是 JVM 没有用这种方式,因为无法判定相互循环引用(A 引用 B,B 引用 A) 的情况。

(2)引用链法: 通过一种 GC ROOT 的对象(方法区中静态变量引用的对象等-static 变量)来判断,如果有一条链能够到达 GC ROOT 就说明,不能到达GC ROOT 就说明可以回收 。

五、GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。

并行收集器:串行收集器使用一个单独的线程进行收集,GC 时服务有停顿时间 串行收集器:次要回收中使用多线程来执行 CMS 收集器是基于“标记—清除”算法实现的,经过多次标记才会被清除 G1 从整体来看是基于“标记—整理”算法实现的收集器,从局部(两个 Region 之间) 上来看是基于“复制”算法实现的 。

六、说一下堆栈的区别?

(1)功能方面:堆是用来存放对象的,栈是用来执行程序的。

(2)共享性:堆是线程共享的,栈是线程私有的。

(3)空间大小:堆大小远远大于栈。

七、说一下类装载的执行过程?

类装载分为以下 5 个步骤:

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

(2)检查:检查加载的 class 文件的正确性;

(3)准备:给类中的静态变量分配内存空间;

(4)解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址;

(5)初始化:对静态变量和静态代码块执行初始化工作。

八、简述minor gc和full gc

(1)Minor GC:从新生代回收内存,关键是Eden区内存不足,造成不足的原因是Java对象大部分是朝生夕死(java局部对象),而死掉的对象就需要在合适的时机被JVM回收.

(2)Major GC:从老年代回收内存,一般比Minor GC慢10倍以上。

(3)Full GC:对整个堆来说的,出现Full GC通常伴随至少一次Minor GC,但非绝对。Full GC被触发的时候:老年代内存不足;持久代内存不足;统计得到的Minor GC晋升到老年代平均大小大于老年代空间。

九、Java内存模型的happen before原则

如果两个操作存在happens-before关系,那么前一个操作的结果就会对后面一个操作可见,是定义的两个操作之间的偏序关系,常见的规则:

(1)程序顺序规则:一个线程中每个操作,happens-before于该线程中的任意后续操作。

(2)监视器锁规则:对一个锁的解锁,happens-before于随后这个锁的加锁。

(3)volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个域的读。

(4)传递性:若A happens-before B,B happens-before C,则A happens-before C.

(5)start()规则:如果线程A执行ThreadB.start(),那么A线程的ThreadB.start()操作happens-before于线程B中的任意操作。

(6)join()规则:若线程A 执行ThreadB.join()并成功返回,则线程B的任意操作happens-before于线程A从ThreadB.jion()操作返回成功。

十、说一下 JVM 有哪些垃圾回收算法?

(1)标记-清除算法:标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。

(2)标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。

(3)复制算法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。

(4)分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

技术面试题分享:含答案的10道Jvm面试专题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

技术面试题分享:含答案的10道Jvm面试专题

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行
2023-06-02

超全面的SpringBoot面试题含答案

这篇文章主要收录了44道面试中经常被问的SpringBoot问题,不管你是正在求职的新手还是已经工作很久的高手,这篇关于SpringBoot的面试题总结一定会让你有新的理解,让我们一起来看看吧
2023-03-23

Python的10道简单测试题(含答案)

这篇文章主要介绍了Python的10道简单测试题(含答案),学习了一段时间python的小伙伴来做几道测试题检验一下自己的学习成果吧
2023-05-15

【2022最新Java面试宝典】—— SpringCloud面试题(49道含答案)

目录 Spring Cloud1. 什么是微服务架构2. 为什么需要学习Spring Cloud3. Spring Cloud 是什么4. SpringCloud的优缺点5. SpringBoot和SpringCloud的区别?6.
2023-08-18

【2022最新Java面试宝典】—— SpringBoot面试题(44道含答案)

目录 1. 什么是 Spring Boot?2. 为什么要用SpringBoot3. SpringBoot与SpringCloud 区别4. Spring Boot 有哪些优点?5. Spring Boot 的核心注解是哪个?它主要
2023-08-17

2023 Java 面试题精选40道,包含答案

Java中什么是重载?什么是覆盖?它们有什么区别? 重载是指在同一个类中,方法名相同但参数类型、个数或顺序不同的情况下,编译器会根据参数列表的不同自动调用不同的方法。覆盖是指子类重写父类的同名方法,使得子类在调用该方法时执行子类的实现而不是
2023-08-16

月薪20+的程序员面试都问这些高端技术题(含答案+面试指导)

不知道大家有没有发现,最近情况在慢慢好转,现在我们小区已经解控了,再也不要绕远路出门了,可喜可贺。当然,我们的金三银四马上也要发挥它该有的作用了,尚未找到工作的朋友们,准备好了吗?今天给大家带来的是大公司需要用到的一些高端Android技术
2023-06-04

【2023最新版】Spring Cloud面试题总结(35道题含答案解析)

文章目录 1、什么是Spring Cloud? 2、使用Spring Cloud有什么优势? 3、服务注册和发现是什么意思?Spring Cloud如何实现? 4、负载平衡的意义什么? 5、什么是Hystrix?它如何实现容错? 6、什么是
2023-08-24

分享一道不错的TS面试题(含3层),看看能答到第几层!

最近遇见一道不错的 TS 面试题,分享一下。这道题有 3 个层次,我们一层层来看。
2023-05-14

【整理分享】一些webpack面试题(附答案解析)

webpack 是一个静态模块打包器,当 webpack 处理应用程序时,会递归构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个 bundle。
2023-05-14

【整理分享】一些常见Vue面试题(附答案解析)

本次给大家分享一些关于Vue的常见面试题,带你梳理基础知识,增强Vue知识储备,值得收藏,快来看看吧!
2023-05-14

php算法面试题及答案示例的分析

这篇文章将为大家详细讲解有关php算法面试题及答案示例的分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、P
2023-06-06

【整理分享】一些vue-router相关面试题(附答案解析)

本篇文章给大家总结分享一些vue-router的相关面试题(附答案解析),带你梳理基础知识,增强vue-router知识储备,值得收藏,快来看看吧!
2023-05-14

【整理分享】48个前端高频面试题(附答案解析)

本篇文章给大家总结分享48个前端高频面试题(附答案解析),带你梳理vue、javascript等的基础知识,增强前端知识储备,值得收藏,快来看看吧!
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录