jvm面试题30问

devtools/2024/10/18 16:38:34/

什么是JVM的跨平台?

在这里插入图片描述

什么是JVM的语言无关性?

在这里插入图片描述

什么是JVM的解释执行

在这里插入图片描述

什么是JIT?

在这里插入图片描述
JIT:在Java编程语言和环境中,即时编译器(JIT compiler,just-in-time compiler)是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。

对象一定是在堆中创建吗?

几乎所有的对象都是在堆中创建,但这不是绝对。
热点代码指的是在程序运行时被频繁执行的代码段。
对象逃逸是指当我们在某个方法里创建了一个对象,这个对象除了被这个方法引用,还在方法体之外被其它的变量引用。
在这里插入图片描述

讲一讲JVM的10种垃圾回收器

在这里插入图片描述

什么是垃圾回收中的STW?

STW(stop the world)
会造成用户的卡顿!用户体验非常差!
在这里插入图片描述

什么是可达性分析算法?

可达性的链路分析
做完可达性分析之后,可达的对象就是存活的对象,反之,没有可达的对象就是垃圾,完成JVM中存活对象和垃圾对象的判断!
如果不使用可达性分析的话,使用引用计数法,循环引用的对象计数不为0。
在这里插入图片描述

JVM中的垃圾回收算法

JVM从诞生到现在只有三种垃圾回收算法,分别是:复制算法、标记清除算法和标记整理算法。
复制算法:将可用的内存一分为二,交换复制。效率比较高,适合于新生代。空间利用率只有50%。
标记清除算法:根据可达性分析进行标记,红色不可回收,灰色可回收。效率可以,但是垃圾回收之后内存不连续,存在内存碎片,大对象无法分配。
标记整理算法:在标记清除算法的基础上把存活对象移动到堆空间的一端,从而完成空间的整理。空间利用率可以,但效率比较低。
三种算法各有所长,又各有所短。
在这里插入图片描述

JVM的分代模型

新生代和老年代,在不同的代里面采用不同的垃圾回收算法
**为什么要进行分代?**因为对象的生命周期不一样,有的对象朝生夕死,但是有的对象生命周期比较长,如果堆内存不分代,所有对象存在相同的区域,那么垃圾回收的时候就会变的很复杂。分代后,垃圾回收就可以按区域的不同,采用不同的回收算法,保证整体垃圾回收的高效性。
在这里插入图片描述

CMS垃圾回收器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。
垃圾回收依赖于可达性分析算法
GC Roots数量很少,一般不会很多,可以在初始标记的时候全暂停。
CMS垃圾回收器的特点
优点:进行垃圾回收的时候,部分工作可以并发,暂停时间比较短;
缺点:业务线程和垃圾回收线程同时运行,cpu核心数小于4的时候,CMS垃圾回收器的效率是比较低的;并发清理会出现一种情况,业务线程可以会产生新垃圾(浮动垃圾),本次垃圾回收是处理不了的;并发清理标记清除算法,会产生内存碎片,空间不连续,大对象无法分配。
在这里插入图片描述

G1垃圾回收器

为了实现暂停时间的可预测,使用化整为零的思想,将堆空间分成大小相等的一些独立区域,每个区域叫做region。
在这里插入图片描述

JVM的运行时数据区有哪些?

在这里插入图片描述
在这里插入图片描述

什么是堆内存?堆内存包含哪些部分?

为了提高复制算法的空间利用率,Eden占80%。(绝大数对象都是朝生夕死)
对象一般要经过15次垃圾回收,才能进入老年代。
不同的代采用不同的垃圾回收算法。
在这里插入图片描述

什么是内存溢出?

在这里插入图片描述

什么是内存泄漏?与内存溢出有什么关系?

在这里插入图片描述

对象头包括哪些部分?

在这里插入图片描述
在这里插入图片描述

给定一个具体的类,请分析对象的内存占用

在这里插入图片描述
在这里插入图片描述
对象的整个占用大小应该是8字节的整数倍。
最终实际占用:40个字节。

常用的JVM启动参数有哪些?

在这里插入图片描述
在这里插入图片描述

设置堆空间的最大值(-Xmx)应该要考虑哪些因素?

在这里插入图片描述
在这里插入图片描述

Java8默认使用的垃圾回收器是什么?

在这里插入图片描述

什么是并行垃圾收集?

在这里插入图片描述

什么是STW?什么是安全点,什么是安全区域?

STW STOP THE WORLD
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果CPU使用率突然飙升,你会怎么排查?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CMS、G1垃圾回收器中的三色标记你了解吗

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类加载与类加载器

在这里插入图片描述
在这里插入图片描述

什么是双亲委派机制?它有什么作用?

在这里插入图片描述

G1收集器有哪些特点

在这里插入图片描述
在这里插入图片描述

哪些手段来排除OOM的问题?

在这里插入图片描述

使用过那些JVM相关的命令工具?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/27621.html

相关文章

docker系列8:容器卷挂载(上)

传送门 docker系列1:docker安装 docker系列2:阿里云镜像加速器 docker系列3:docker镜像基本命令 docker系列4:docker容器基本命令 docker系列5:docker安装nginx docker系列6:docker安装redis docker系…

汽车制造业安全事故频发,如何才能安全进行设计图纸文件外发?

汽车制造业产业链长,关联度高,汽车制造上游行业主要为钢铁、化工等行业,下游主要为个人消 费、基建、客运和军事等。在汽车制造的整个生命周期中,企业与上下游供应商、合作商之间有频繁、密切的数据交换,企业需要将设计…

unity入门——按钮点击了却无法调用函数

查阅了一番都没有解决问题,最后发现问题是由button的Onclick()事件绑定了代码脚本而不是游戏对象导致的。 如果Onclick()事件绑定的是代码脚本,则下拉框里没有函数,但是点击MonoScript后能手动填入函数名(本以为这样就能实现调用…

探索Plotly交互式数据可视化

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 探索Plotly交互式数据可视化 在数据科学和数据分析领域,可视化是一种强大的工具…

在AndroidStudio创建Flutter项目并运行到模拟器

1.Flutter简介 Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费,拥有宽松的开源协议,适合商…

Zapier 与生成式 AI 的自动化(六)

原文:zh.annas-archive.org/md5/057fe0c351c5365f1188d1f44806abda 译者:飞龙 协议:CC BY-NC-SA 4.0 第二十三章:自动化您的财务和报告流程 到目前为止,我们已经介绍了如何自动化三个关键的业务功能,即营销…

链表面试题详解

前言 之前我们学习过C语言中的数据结构——链表,我们这一节做几个面试题来巩固一下链表的知识,那么废话不多说,我们正式进入今天的学习 面试题1:返回倒数第K个节点 题目: 思路一: 我们可以新建一个数组&…

Ubuntu编译安装MariaDB并进行初始化配置

Ubuntu编译安装MariaDB并进行初始化配置 1. 编译安装MariaDB2. 配置MariaDB3. Docker安装MariaDB 1. 编译安装MariaDB MariaDB官方安装文档:https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/    下载MariaDB源码:https://mariadb.org/ma…