10道JVM经典面试题

1、 JVM中,new出来的对象是在哪个区?

2、 说说类加载有哪些步骤?

3、 JMM是什么?

4、 说说JVM内存结构?

5、 MinorGC和FullGC有什么区别?

6、 什么是STW?

7、 什么情况下会发生堆/栈溢出?

8、 你了解几种垃圾回收器,简单说说?

9、 垃圾回收算法你了解吗?

10、 如果对象的引用被置为null,会被马上回收吗?

1、 JVM中,new出来的对象是在哪个区?

new出来的对象放在堆里,对象的引用放在栈里。

2、 说说类加载有哪些步骤?

类加载分三步:加载、连接(验证、准备和解析)和初始化。

加载:class文件加载到JVM内存(静态变量、常量放到方法区),产生Class对象。

验证:验证class文件是否格式正确。

准备:为静态变量分配内存并设置默认的初始值

解析:将符号引用替换为直接引用 (栈帧里的动态链接也有一步符号引用转变为直接引用)

初始化:为类的静态变量赋予正确的初始值。

3、 JMM是什么?

JMM是java内存模型,是一种规范,与线程共享有关,堆和方法区所有线程共享,需要对其制定规则规范。主内存:java所有变量都存储在主内存中。工作内存/线程本地内存:本线程用到的变量为主存中的副本拷贝。

4、 说说JVM内存结构?

共享区域:堆、方法区

私有区域:虚拟机栈、程序计数器、本地方法栈。

堆:对象和数组、字符串常量池。

方法区:常量、静态变量,运行时常量池(字面量和符号引用)。

虚拟机栈:局部变量、对象引用。

程序计数器:记录线程执行位置,以便下一次继续执行。

本地方法栈:是一些native方法(c++实现)

5、 MinorGC和FullGC有什么区别?

MinorGC发生在年轻代,当eden区满了之后会触发MinorGC.

FullGC发生在老年代,它会暂停所有线程回收年轻代和老年代的对象。

6、 什么是STW?

STW(STOP THE WORLD)GC前会执行STW操作。线程进入JVM设置的“安全点”,暂停所有运行中的线程,stop the world,然后开始GC。

7、 什么情况下会发生堆/栈溢出?

递归容易发生栈溢出。 堆溢出:对象一直增大,不释放。 比如循环里一直list.add

8、 你了解几种垃圾回收器,简单说说?

Serial单线程串行回收器、Parallel并行回收器、CMS回收器、G1回收器、ZGC回收器。

Serial是年轻代串行回收器,采用复制算法。

Serial Old是老年代串行回收器,采用标记整理算法。

Parallel Scavenge是年轻代并行回收器,采用复制算法。

Parallel Old是老年代并行回收器,采用标记整理算法。

ParNew是年轻代并行回收器,采用复制算法,与Scavenge的区别是它能够与CMS结合。

CMS是老年代回收器,采用标记清除算法,特点是低停顿时间,但牺牲一定的吞吐量。

G1回收器是JDK9默认的回收器,废除了空间上的区域划分,而是采用一个个独立的region区域组成,逻辑上保留了分代策略。

ZGC是JDK11引入的回收器,是一种低延迟的回收器。

9、 垃圾回收算法你了解吗?

有引用计数器算法、复制算法、标记清除算法、标记整理算法。

引用计算器就是对象被别人引用时,它的计数器加1,引用结束就减1,对象的计数器值为0就回收。

标记清除根据根节点寻找可达对象,如果不可达就回收,可达性分析法就是挑选一个稳定的对象作为GCROOT,然后寻找可达的对象,不可达就回收。

复制算法把空间分钟两块,回收的时候就把未使用的复制到另一块区域,然后满了就删除本区域,从头到尾只使用一块空间,另一块作为存放回收时未使用的部分。

标记整理算法在标记-清除算法的基础上做了一些优化。在一块内存空间内,标记可达的对象,压缩到内存的一边,然后删除其他对象,这样就不会产生内存碎片。

10、 如果对象的引用被置为null,会被马上回收吗?

不会,在下一个垃圾回收周期中,这个对象是可被回收的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当“广撒网”遇上“精准定点”的鱼叉式网络钓鱼

批量网络钓鱼电子邮件活动倾向于针对大量受众,它们通常使用笼统的措辞和简单的格式,其中不乏各种拼写错误。而有针对性的攻击往往需要付出更大的努力,攻击者会伪装成雇主或客户向目标发送包含个人详细信息的个性化消息。在更大范围内采用这种…

Mybatis plus自定义分页

引言 在众多现代Web应用中,数据分页是一项基础且关键的功能,它不仅可以显著提升用户体验,还能有效减少服务器的负载。传统的分页方法通常在数据库层面进行,通过SQL查询直接返回分页结果。这种方法在大多数情况下都非常高效。然而…

大语言模型-文本检索任务基准 BEIR

BEIR (A Heterogeneous Benchmark for Zero-shot Evaluation of Information Retrieval Models) 文本检索任务的基准,使用18 个数据集为检索系统的零样本评估提出了一个标准化基准, BEIR 基准上在9个不同领域的检索任务评估 10 种不同的检索方法。 九个…

义务外贸wordpress独立站主题

健身器材wordpress网站模板 跑步机、椭圆机、划船机、动感单车、健身车、深蹲架、龙门架、健身器材wordpress网站模板。 https://www.jianzhanpress.com/?p4251 农业机械wordpress网站模板 植保机械、畜牧养殖机械、农机配件、土壤耕整机械、农业机械wordpress网站模板。 …

解决前端开发中的浏览器兼容性问题

在前端开发中,浏览器兼容性问题是一个常见且挑战性的课题。不同的浏览器对HTML、CSS和JavaScript的解析和支持程度各有不同,这可能导致网站或应用在不同浏览器上展现出不一致的效果,甚至功能上的错误。本文将讨论如何识别和解决这些浏览器兼容…

1.关于linux的命令

1.关于文件安装的问题 镜像站点服务器:cat /etc/apt/sources.list 索引文件:cd /var/lib/apt/lists 下载文件包存在的路径:cd /etc/cache/apt/archives/2.关于dpkg文件安装管理器的应用: 安装文件:sudo dpkg -i 文件名; 查找文件目录:sudo …

【Linux】vim编辑器使用详解

目录 一、vim编辑器简介二、 vim编辑器使用指南1.基本操作1.进入与退出2.模式切换 2.命令模式1.移动光标2.选择文本(可视模式)3.删除文字4.复制粘贴5.替换6.撤销 3.底行模式1.列出每行的行号2.跳转到某行3.查找字符4.保存文件5.退出vim 三、vim总结 一、…

oracle 11G long类型如何转换 CLOB

oracle 11G long类型如何转换 CLOB oracle 11G long类型如何转换 CLOBStep 1: 创建示例表并插入数据Step 2: 创建一个临时 CLOB 列,并将 LONG 数据复制到 CLOB 列.Step 3: 创建一个新表,将 CLOB 数据转换为 VARCHAR2(假设数据长度允许&#x…

Perl中的设计模式革新:命令模式的实现与应用

Perl中的设计模式革新:命令模式的实现与应用 在面向对象编程中,设计模式是解决特定问题的成熟模板。命令模式作为行为设计模式之一,它将请求封装为对象,从而允许用户根据不同的请求对客户进行参数化。本文将深入探讨如何在Perl中…

2.1.卷积层

卷积 ​ 用MLP处理图片的问题:假设一张图片有12M像素,那么RGB图片就有36M元素,使用大小为100的单隐藏层,模型有3.6B元素,这个数量非常大。 识别模式的两个原则: 平移不变性(translation inva…

K8S 部署jaeger-operator,与其演示项目hotrod

最近在研究observabilty在K8S环境的onboard,查阅了一些资料,发现现在网上Prometheus/Metrics相关的资源,是比较全面的,而Trace相关的部分不是很全面,所以写下这篇博文,以做备忘和分享。 组件介绍 我这里选…

Excel的操作

Excel的操作 一、Excel的作用 Excel是一款功能强大的电子表格软件,主要用于数据处理和分析。 二、Excel的基础操作 新建文档 一般情况下,就在桌面空白处,点击鼠标右键,即可新建 三、页面布局 1、快速访问工具栏 主要包含&am…

为 android编译 luajit库、 交叉编译

时间:20200719 本机环境:iMac2017 macOS11.4 参考: 官方的文档:Use the NDK with other build systems 写在前边:交叉编译跟普通编译类似,无非是利用特殊的编译器、链接器生成动态或静态库; make 本质上是按照 Make…

ssm 学习 ---(spring)

一、spring框架 1、基本框架 2、Beanfactory快速入门 配置清单:xml文件 (1) 导入jar包或者maven坐标 (2) 定义UserService接口以及UserService实现类 (3) 创建bean.xml配置文件,将UserService信息配置到该xml文件中; (4)编写测试代码,创…

ubuntu lxqt触摸屏旋转校准(usb触摸屏、lxqt、ubuntu23.10)

参考文章:https://www.codetd.com/article/5651388 1.查看触摸屏驱动 rootxyy:~# xinput list ⎡ Virtual core pointer id2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id4 [slave pointer (2)…

JVM 在什么情况下会触发垃圾回收?

垃圾回收在JVM中自动进行,通常在以下几种情况下触发: 1. 年轻代满了(Young Generation Full) 当年轻代的Eden区满了时,会触发Minor GC(也称为Young GC)。这是因为新创建的对象首先分配在Eden区…

【音视频】AAC编码器与ffmpeg生成AAC数据

文章目录 前言为什么使用AAC?AAC规格常见的AAC规格规格之间的区别 ffmpeg生成AAC数据 总结 前言 在音频压缩技术不断发展的过程中,AAC(Advanced Audio Coding)编码器因其出色的音质和压缩效率,逐渐成为数字音频领域的…

牛客周赛51:小红走矩阵(二分+bfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定nnn \times nnn的矩阵,矩阵中的每个元素都是正整数,小红能当前位于左上角(1,1)(1,1)(1,1),每次可以从 (x,y)(x, y)(x,y) 走到 (x1,y)(x1, y)(…

为了实现接口缓存,专门写了个缓存库 f-cache-memory

问题起因 起因是某次发版之后,服务器接口压力过大,当场宕机,排查之后发现有个接口在首页被调十来次(六七年的老项目了,都是泪呀),后端反馈这个接口的sql很复杂,很耗性能&#xff0c…

如何根据同一行的ID利用R语言对值进行求和

需求:将属于同一分组的对应的值进行求和或者求平均值 #设置工作目录 > getwd() [1] "C:/Users/86150/Documents" > setwd("C:/Users/86150/Desktop/AA2024/RUF") > list.files() #读取文件 >install.packages("readxl")…