当前位置: 首页 > news >正文

JVM高频面试题

1、项目中什么情况下会内存溢出,怎么解决?

	(1)误用固定大小线程池导致内存溢出  Excutors.newFixedThreadPool内最大线程数是21亿(2) 误用带缓冲线程池导致内存溢出最大线程数是21亿(3)一次查询太多的数据,导致内存占用太大(4)动态生成类导致内存溢出

2、类加载过程?

三个过程:加载:

在这里插入图片描述
链接:
在这里插入图片描述
链接又分为:验证、准备、解析

	初始化:

在这里插入图片描述
总结:所谓类加载机制就是:虚拟机把Class文件加载到内存,并对数据进行校验、转换解析和初始化,形成虚拟机可以直接使用的Java类型,即java.lang.class

补充:类.class只会触发类加载且只会加载一次,而new 类()则会触发类初始化。静态变量的赋值在初始化时完成。

3、什么是双亲委派?
在这里插入图片描述

4.对象引用分为哪几类?

	1.强引用

在这里插入图片描述
正常对象引用

		2.软引用

在这里插入图片描述
系统内存足够时不会被回收,不足时才会被回收。且若回收之后仍内存不够,则会内存溢出
3.弱引用
在这里插入图片描述
无论内存是否充足都会被回收
4.虚引用
在这里插入图片描述
主要用来跟踪对象被垃圾回收的过程,任何时候都可能被垃圾回收

5、堆(heap)和栈(stack)有什么区别?
1、内存分配方式不同:堆是动态分配内存空间的;栈是静态分配内存空间的。
2、内存空间大小不同:堆的内存空间通常比较大,可以动态扩展;而栈的内存空间通常比较小,由于静态分配,所以大小固定。
3、内存分配效率不同:堆的内存分配效率相对较低,因为需要进行垃圾回收和内存整理等操作;而栈的内存分配效率相对较高,因为只需要简单地移动指针即可。
4、存储内容不同:堆用于存储对象实例和数组等动态数据,它具有很好的灵活性;而栈用于存储方法调用的局部变量和操作数栈等数据,它具有很好的局部性和快速访问的特点。

6、什么情况下会发生栈内存溢出?

方法调用层次过深:如果方法调用层次过深,每次方法调用都会在栈中创建一个新的栈帧,如果栈空间不足,就会导致栈内存溢出。
局部变量过多:如果方法中定义了大量的局部变量,也会占用栈空间,如果栈空间不足,就会导致栈内存溢出。
递归调用:递归调用会不断地向栈中添加新的方法调用,如果递归深度过大,就会导致栈内存溢出。
参数传递过多:如果方法参数传递过多,也会占用栈空间,如果栈空间不足,就会导致栈内存溢出。
大量线程调用:如果同时有大量的线程在栈中进行方法调用,也会占用栈空间,如果栈空间不足,就会导致栈内存溢出。

7、什么是OOM?
OOM 是 OutOfMemoryError 的缩写,是指在 Java 程序运行期间,由于内存不足而导致程序出现错误的情况。OOM 错误通常分为堆内存溢出和非堆内存溢出两种情况。

8、如何判断一个对象是否存活?

	1、引用计数法:引用计数法是一种简单的垃圾回收算法,它通过统计对象的引用计数,来判断对象是否存活。每当一个对象被引用时,它的引用计数加 1,当一个对象的引用计数为 0 时,说明该对象已经不再被使用,可以被垃圾回收器回收。但是,引用计数法无法处理循环引用的情况,即两个或多个对象相互引用,导致它们的引用计数都不为 0,无法被回收。2、可达性分析法:可达性分析法是一种常用的垃圾回收算法,它通过从一组根对象开始,查找所有被这组根对象所引用的对象,以此来确定哪些对象是存活的。在可达性分析法中,根对象可以是程序中的静态变量、本地变量或者正在执行的线程等。当一个对象无法被根对象所引用时,说明该对象已经不再被使用,可以被垃圾回收器回收。

可达性分析法是 Java 中常用的判断对象存活的方式,它考虑了对象之间的引用关系,可以处理循环引用的情况,而引用计数法则无法处理循环引用的情况,因此在 Java 中并不采用引用计数法来判断对象是否存活。

9、有哪几种垃圾回收器?各自的优点是什么?
Serial 垃圾回收器:是一种单线程的垃圾回收器,它使用标记-清除算法来回收垃圾对象。优点是简单高效,适合小型应用场景,但是在多核处理器上的表现较差。

Parallel 垃圾回收器:是一种多线程的垃圾回收器,它使用标记-整理算法来回收垃圾对象。优点是在多核处理器上的表现比 Serial 垃圾回收器更好,适合中型应用场景。

CMS 垃圾回收器:是一种并发的垃圾回收器,它使用标记-清除算法来回收垃圾对象。优点是回收效率高,暂停时间短,适合大型应用场景。但是,CMS 垃圾回收器会产生内存碎片,可能会导致频繁的 Full GC,影响应用性能。

G1 垃圾回收器:是一种并发的垃圾回收器,它使用标记-整理算法来回收垃圾对象。优点是在大型应用场景下表现良好,可以有效避免内存碎片和频繁的 Full GC。同时,G1 垃圾回收器还支持设置可预测的暂停时间,使得应用程序的性能得到进一步优化。可以优先回收大块垃圾的区域

Serial和CMS都是标记清楚,Parallel和G1都是标记整理。G1现在用的最多。

10、什么是JVM内存结构?
JVM分为堆、虚拟机栈、本地方法栈、程序计数器、方法区

虚拟机栈里有局部变量表、操作数栈、动态链接、方法返回信息

本地方法栈:是C栈,执行本地方法

程序计数器:用于记录当前虚拟机正执行的线程指令地址

堆:所有线程共享的一块内存,虚拟机开启时就创建,可通过GC进行回收。

方法区:jdk1.8之后叫元数据区

相关文章:

JVM高频面试题

1、项目中什么情况下会内存溢出,怎么解决? (1)误用固定大小线程池导致内存溢出 Excutors.newFixedThreadPool内最大线程数是21亿(2) 误用带缓冲线程池导致内存溢出最大线程数是21亿(3)一次查询太多的数据,导致内存占用…...

Windows环境下实现设计模式——状态模式(JAVA版)

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现状态模式(设计模式)。不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式,无…...

【总结】多个条件排序(pii/struct/bool)

目录 pii struct bool pii 现在小龙同学要吃掉它们,已知他有n颗苹果,并且打算每天吃一个。 但是古人云,早上金苹果,晚上毒苹果。由此可见,早上吃苹果和晚上吃苹果的效果是不一样的。 已知小龙同学在第 i 天早上吃苹果能…...

基于stm32mp157 linux开发板ARM裸机开发教程Cortex-A7 开发环境搭建(连载中)

前言:目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板)针对对FS-MP1A开发板&#xff…...

最适合游戏开发的语言是什么?

建议初学者学习主流的开发技术 主流开发技术有大量成熟的教程、很多可以交流的学习者、及时的学习反馈等;技术的内里基本都是相同的,学习主流技术的经验、知识可以更好更快地疏通学习新知识和技术。 因此,对C#或者C二选一进行学习较好。 Un…...

C语言刷题(7)(字符串旋转问题)——“C”

各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是复习之前的知识点,那么,就是做一道小小的题目啦,下面,让我们进入C语言的世界吧 实现一个函数,可以左旋字符串中的k个字符。 例如: A…...

有趣且重要的JS知识合集(18)浏览器实现前端录音功能

1、主题描述 兼容多个浏览器下的前端录音功能,实现六大录音功能: 1、开始录音 2、暂停录音 3、继续录音 4、结束录音 5、播放录音 6、上传录音 2、示例功能 初始状态: 开始录音: 结束录音: 录音流程 &#xf…...

面试官:聊聊你知道的跨域解决方案

跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加游刃有余。 因此今天就来和大家从前端的角度来聊聊解决跨域常见的几种方式。…...

SpringCloud五大核心组件

Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。 服务发现——Netflix Eureka …...

Verilog HDL语言入门(二)

强烈建议用同步设计2.在设计时总是记住时序问题3.在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿或下降沿触发等问题,在所有模块中都要遵守它4.在不同的情况下用if和case,最好少用if的多层嵌套(1层或2层比较合适&#…...

Simpleperf详细使用

一、Simpleperf介绍 Simpleperf是一个强大的命令行工具,它包含在NDK中,可以帮助我们分析应用的CPU性能。Simpleperf可以帮助我们找到应用的热点,而热点往往与性能问题相关,这样我们就可以分析修复热点源。 如果您更喜欢使用命令…...

【算法基础】二分图(染色法 匈牙利算法)

一、二分图 1. 染色法 一个图是二分图,当且仅当,图中不含奇数环。在判别一个图是否为二分图⑩,其实相当于染色问题,每条边的两个点必须是不同的颜色,一共有两种颜色,如果染色过程中出现矛盾,则说明不是二分图。 for i = 1 to n:if i 未染色DFS(i, 1); //将i号点染色未…...

Caputo 分数阶微分方程-慢扩散方程初边值问题基于L1 逼近的空间二阶方法及其Matlab程序实现

2.3.3 Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法 考虑如下时间分数阶慢扩散方程初边值问题 { 0 C D t α u ( x , t ) = u...

I.MX6ULL_Linux_驱动篇(29) GPIO驱动

Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本篇的 LED 灯驱动最终也是对 I.MX6ULL 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 …...

jupyter的安装和使用

目录 ❤ Jupyter Notebook是什么? notebook jupyter 简介 notebook jupyter 组成 网页应用 文档 主要特点 ❤ jupyter notebook的安装 notebook jupyter 安装有两种途径 1.通过Anaconda进行安装 2.通过pip进行安装 启动jupyter notebook ❤ jupyter …...

Springboot新手开发 Cloud篇

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:后端专栏 📧如果文章知识点有错误的地方,…...

Linux:函数指针做函数参数

#include <stdio.h> #include <stdlib.h> //创建带有函数指针做参数的函数框架api //调用者要先实现回调函数 //调用者再去调用函数框架 //所谓的回调是指 调用者去调用一个带有函数指针做参数的函数框架&#xff0c;函数框架反过来要调用调用者提供的回调函数 …...

Vue3(递归组件) + 原生Table 实现树结构复杂表格

一、递归组件 什么是递归&#xff0c;Javascript中经常能接触到递归函数。也就是函数自己调用自己。那对于组件来说也是一样的逻辑。平时工作中见得最多应该就是菜单组件&#xff0c;大部分系统里面的都是递归组件。文章中我做了按需引入的配置&#xff0c;所以看不到我引用组…...

ArrayList底层源码解析

Java源码系列&#xff1a;下方连接 http://t.csdn.cn/Nwzed 文章目录前言一、**ArrayList底层结构和源码分析**无参构造调用创建ArrayList集合无参构造总结&#xff1a;发文3个工作日后 up 会把总结放入前言部分&#xff0c;但也诚邀读者总结&#xff0c;可放入评论区有参构造…...

python:DIY字符画的程序使用说明.doc

目录开发环境要求运行方法具体的操作步骤如下&#xff1a;代码示例源码及运行程序下载地址开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 7、Windows 10。 Python版本&#xff1a;Python 3.7.0。 开发工具&#xff1a;Python IDLE。 …...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...