JVM常见面试总结

JVM(Java虚拟机)是Java程序运行的核心,掌握JVM相关知识对于Java开发者至关重要。以下是JVM常见的面试问题总结:


1. JVM内存模型

  • 问题:JVM的内存结构分为哪些部分?

  • 答案

    • 方法区(Method Area):存储类信息、常量、静态变量等。

    • 堆(Heap):存放对象实例和数组,是垃圾回收的主要区域。

    • 栈(Stack):每个线程私有的,存储局部变量、方法调用栈帧。

    • 程序计数器(PC Register):记录当前线程执行的字节码指令地址。

    • 本地方法栈(Native Method Stack):为Native方法服务。


2. 垃圾回收(GC)

  • 问题:JVM的垃圾回收机制是什么?

  • 答案

    • 垃圾回收主要针对堆内存,通过标记-清除、复制、标记-整理等算法回收不再使用的对象。

    • 常见的垃圾回收器:

      • Serial GC:单线程,适合小型应用。

      • Parallel GC:多线程,适合吞吐量优先的场景。

      • CMS(Concurrent Mark Sweep):低延迟,适合响应时间敏感的应用。

      • G1(Garbage First):分区回收,兼顾吞吐量和延迟。

      • ZGCShenandoah:超低延迟,适合大内存应用。


3. 类加载机制

  • 问题:JVM的类加载过程是怎样的?

  • 答案

    • 加载:通过类加载器将.class文件加载到内存。

    • 验证:检查字节码的正确性。

    • 准备:为静态变量分配内存并设置默认值。

    • 解析:将符号引用转换为直接引用。

    • 初始化:执行静态代码块和静态变量赋值。

    • 使用:类的实例化和方法调用。

    • 卸载:从内存中移除不再使用的类。


4. 类加载器

  • 问题:JVM有哪些类加载器?

  • 答案

    • Bootstrap ClassLoader:加载JVM核心类库(如rt.jar)。

    • Extension ClassLoader:加载扩展类库(如ext目录下的jar)。

    • Application ClassLoader:加载应用程序类路径(ClassPath)下的类。

    • 自定义类加载器:开发者可以继承ClassLoader实现自定义加载逻辑。


5. 双亲委派模型

  • 问题:什么是双亲委派模型?它的作用是什么?

  • 答案

    • 双亲委派模型是指类加载器在加载类时,先委托父类加载器尝试加载,只有在父类加载器无法加载时,才由自己加载。

    • 作用

      • 避免类的重复加载。

      • 保证核心类库的安全性,防止用户自定义类替换核心类。


6. JVM调优

  • 问题:如何对JVM进行调优?

  • 答案

    • 堆内存设置:通过-Xms(初始堆大小)和-Xmx(最大堆大小)调整堆内存。

    • 年轻代和老年代比例:通过-XX:NewRatio调整。

    • 垃圾回收器选择:根据应用场景选择合适的垃圾回收器。

    • 监控工具:使用JVisualVM、JConsole、Arthas等工具监控JVM状态。

    • 避免内存泄漏:检查代码中是否有未释放的资源。


7. OOM(OutOfMemoryError)

  • 问题:常见的OOM错误有哪些?如何排查?

  • 答案

    • Java Heap Space:堆内存不足,可以通过增大堆内存或优化代码解决。

    • Metaspace:元空间不足,通常是因为加载了过多的类。

    • StackOverflowError:栈溢出,通常是因为递归调用过深。

    • Direct Buffer Memory:直接内存不足,通常与NIO相关。

    • 排查方法:使用jmapjstack等工具分析内存快照和线程栈。


8. JVM性能监控工具

  • 问题:常用的JVM性能监控工具有哪些?

  • 答案

    • jps:查看Java进程状态。

    • jstat:监控JVM内存和GC情况。

    • jmap:生成堆内存快照。

    • jstack:查看线程栈信息。

    • JVisualVM:图形化监控工具。

    • Arthas:在线诊断工具。


9. JIT编译器

  • 问题:什么是JIT编译器?它的作用是什么?

  • 答案

    • JIT(Just-In-Time)编译器是JVM的一部分,负责将热点代码(频繁执行的代码)编译为本地机器码,以提高执行效率。

    • 与解释器相比,JIT编译器可以显著提升性能。


10. JVM参数

  • 问题:常见的JVM参数有哪些?

  • 答案

    • -Xms:初始堆大小。

    • -Xmx:最大堆大小。

    • -Xss:线程栈大小。

    • -XX:NewRatio:年轻代与老年代的比例。

    • -XX:MaxMetaspaceSize:元空间最大大小。

    • -XX:+UseG1GC:启用G1垃圾回收器。


11. 对象的创建与回收

  • 问题:对象在JVM中是如何创建和回收的?

  • 答案

    • 创建

      1. 检查类是否加载。

      2. 分配内存(指针碰撞或空闲列表)。

      3. 初始化对象头(如哈希码、GC分代年龄)。

      4. 执行构造函数。

    • 回收

      1. 标记不再使用的对象。

      2. 清除或整理内存。


12. 逃逸分析

  • 问题:什么是逃逸分析?它的作用是什么?

  • 答案

    • 逃逸分析是JVM优化技术,用于分析对象的作用域是否逃逸出方法或线程。

    • 作用

      • 栈上分配:将对象分配在栈上,减少堆压力。

      • 同步消除:消除不必要的同步操作。

      • 标量替换:将对象拆分为基本类型变量。

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

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

相关文章

计算机网络精讲day1——计算机网络的性能指标(上)

性能指标1:速率 概念1:比特 英文全称是binary digit,意思是一个二进制数字,因此一个比特就是二进制数字中的1或0,比特也是信息论中使用的信息量单位。 概念2:速率 网络中的速率指的是数据的传送速率&#…

ubuntu20.04使用matlab2024a快捷键调整

一、概述 因为最近在使用ubuntu系统,在上面安装一个matlab比较方便,不用来回在window上面进行跳转,节省不少时间,同时在ubuntu下面启动matlab速度也比较快。 二、问题解决 (一)问题概述 问题如下&#xf…

【设计模式】装饰模式

六、装饰模式 装饰(Decorator) 模式也称为装饰器模式/包装模式,是一种结构型模式。这是一个非常有趣和值得学习的设计模式,该模式展现出了运行时的一种扩展能力,以及比继承更强大和灵活的设计视角和设计能力,甚至在有些场合下&am…

科技赋能安全:慧通测控的安全带全静态性能测试

汽车的广泛普及给人们的出行带来了极大便利,但交通事故频发也成为严重的社会问题。据世界卫生组织统计,全球每年约有 135 万人死于道路交通事故,而安全带在减少事故伤亡方面起着不可替代的作用。正确使用安全带可使前排驾乘人员的死亡风险降低…

猿大师中间件:如何在最新Chrome浏览器Web网页内嵌本地OCX控件?

OCX控件是ActiveX控件的一种,主要用于在网页中嵌入复杂的功能,如图形渲染、多媒体播放等,可是随着谷歌Chrome等主流浏览器升级,目前已经不支持微软调用ActiveX控件了,如果想调用OCX控件用IE浏览器或者国产双擎浏览器&a…

基于STC89C52的DS1621温度检测系统

摘要 本文设计了一种基于STC89C52单片机的DS1621温度检测系统,通过DS1621传感器采集温度数据,利用STC89C52单片机处理数据,并通过串口将温度信息发送至电脑显示。借助Proteus软件进行仿真验证,实现了温度检测系统的功能演示。该系…

创建自己的github.io

1、创建GitHub账号 GitHub地址:https://github.com/ 点击Sign up创建账号 如果已创建,点击Sign in登录 2、创建仓库 假设Owner为username,则Repository name为username.github.io说明: 1、Owner为用户名 2、Repository name为仓…

AI Agent中的MCP详解

一、协议定义与核心价值 MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的开放标准协议,其核心目标是通过建立统一接口规范,解决AI模型与外部系统集成效率低下的行业痛点。该协议通过标准化通信机制,使大型语言模型(LLM)能够无缝对接数…

【AI论文】DeepMesh:基于强化学习的自回归艺术家网格创建

摘要:三角形网格在3D应用中扮演着至关重要的角色,能够实现高效的操作和渲染。虽然自回归方法通过预测离散的顶点标记来生成结构化的网格,但它们往往受到面数限制和网格不完整性的约束。为了应对这些挑战,我们提出了DeepMesh框架&a…

基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布

第〇部分 前言 一幅带有地理空间参考、且包含海陆分布的DEM图像在研究区的绘制中非常常见,本文将实现以下图像的绘制 关键步骤: (1)NOAA-NCEI官方下载最新的ETOPO-2022 DEM数据 (2)在ArcGIS(…

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…

docker模拟Dos_SYN Flood拒绝服务攻击 (Ubuntu20.04)

目录 ✅ 一、实验环境准备(3 个终端) 👉 所以最终推荐做法: 2️⃣ 配置 seed-attacker 为攻击者,开启 telnet 服务: 3️⃣ 配置 victim-10.9.0.5 为受害者服务器,开启 telnet 客户端并监听&…

场外个股期权是什么?场外个股期权还能做吗?

场外个股期权指在非正式的交易场所,即场外市场上,老板们与特定对手方直接进行的个股期权交易。 场外期权为何被严监管? 场外个股期权指在非正式的交易场所,即场外市场上,老板们与特定对手方直接进行的个股期权交易&am…

vulnhub靶场【billu系列】之billu_b0x2靶机

前言 靶机:billu_b0x2靶机,IP地址为192.168.10.10 攻击:kali,IP地址为192.168.10.6 靶机和攻击机都采用VMware虚拟机,都采用桥接网卡模式 文章涉及的靶机及工具,都可以自行访问官网或者项目地址进行获取…

高性能边缘计算网关-高算力web组态PLC网关

高性能EG8200Pro边缘计算算力网关-超强处理能力 样机申请测试:免费测试超30天(https://www.iotrouter.com/prototype/) 产品主要特点和特色功能 设备概览与连接能力 设备型号:EG8200P。主要特点: 支持多种工业协议&am…

数据可信安全流通实战,隐语开源社区Meetup武汉站开放报名

隐语开源社区 Meetup 系列再出发!2025 年将以武汉为始发站,聚焦"技术赋能场景驱动",希望将先进技术深度融入数据要素流转的各个环节,推动其在实际应用场景中落地生根,助力释放数据要素的最大潜能&#xff01…

避坑指南 | 阿里云服务器centos7上MySQL部署优化指南

目录 1 检查阿里云是否安装mysql 1.1使用 rpm 命令 1.2检查 MySQL 服务状态 2 卸载mysql 2.1停止 MySQL 服务 2.2 检查已安装的 MySQL 包 2.3 卸载 MySQL 包 2.4 删除 MySQL 数据和配置文件 2.5 清理残留的依赖包 2.6 验证卸载 2.7 (可选)删除…

位运算--求二进制中1的个数

位运算–求二进制中1的个数 给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。 输入格式 第一行包含整数 n。 第二行包含 n 个整数,表示整个数列。 输出格式 共一行,包含 n 个整数,其中的第 i 个数表…

Go语言的基础类型

一基础数据类型 一、布尔型(Bool) 定义:表示逻辑真 / 假,仅有两个值:true 和 false内存占用:1 字节使用场景:条件判断、逻辑运算 二、数值型(Numeric) 1. 整数类型&…

SpringBoot整合MQTT最详细版(亲测有效)

一、导入pom.xml依赖 <!--mqtt依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration</artifactId></dependency><dependency><groupId>org.springframework.in…