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

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优化技术,用于分析对象的作用域是否逃逸出方法或线程。

    • 作用

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

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

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

相关文章:

JVM常见面试总结

JVM(Java虚拟机)是Java程序运行的核心,掌握JVM相关知识对于Java开发者至关重要。以下是JVM常见的面试问题总结: 1. JVM内存模型 问题:JVM的内存结构分为哪些部分? 答案: 方法区(Met…...

博客系统自动化测试报告

1.项目背景 基于SSM框架实现的个人博客系统,现有登录注销页面,博客列表页,博客内容页,博客编辑页面。登录即可查看自己曾经发表的博客,通过使用Selenium定位web元素、对获取到的元素进行操作等,对博客系统…...

如何选择合适的 AI 模型?(开源 vs 商业 API,应用场景分析)

1. 引言 在 AI 迅猛发展的今天,各类 AI 模型层出不穷,从开源模型(如 DeepSeek、Llama、Qwen)到商业 API(如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini),每种方案都有其优势与适用…...

目标检测20年(二)

没有看过(一)的可以看看笔者这篇文章: 目标检测20年(一)-CSDN博客 目录 3.2 目标检测数据集和指标 3.2.1 数据集 3.2.1.1 Pascal VOC 3.2.1.2 ILSVRC 3.2.1.3 MS-COCO 3.2.1..4 Open Images 3.2.2 指标 3.3 目…...

【linux】统信操作系统修改默认编辑模式从nano改为vim

统信操作系统修改默认编辑模式从nano改为vim 适用命令update-alternatives --config editor rootuos-PC:~# update-alternatives --config editor 有 3 个候选项可用于替换 editor (提供 /usr/bin/editor)。选择 路径 优先级 状态 ---------------------…...

在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译

在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译 应用——系统工具——终端 suozhangfedora:~$ rpm -aq | grep firefox firefox-131.0.2-1.fc41.x86_64 firefox-langpacks-131.0.2-1.fc41.x86_64 fedora41系统自身安装有f…...

集成学习(下):Stacking集成方法

一、Stacking的元学习革命 1.1 概念 Stacking(堆叠法) 是一种集成学习技术,通过组合多个基学习器(base learner)的预测结果,并利用一个元模型(meta-model)进行二次训练&#xff0c…...

知道自己鼠标在某个竖直平面上的经纬度信息在这个竖直的平面上的实时坐标

鼠标放上去就开启map.on(mars3d.EventType.mouseMove,结合以下方法实现 callback: function (e) {// 经纬度const mpt LngLatPoint.fromCartesian(e.cartesian)const ptNew proj4Trans([mpt.lng, mpt.lat], "EPSG:4326", CRS.CGCS2000_GK_Zone_3)const …...

【技术简析】触觉智能RK3506 Linux星闪网关开发板:重新定义工业物联新标杆

在工业智能化与物联网深度融合的今天,深圳触觉智能推出首款搭载瑞芯微RK3506芯片的Linux星闪网关开发板,为大家技术解析。 RK3506-国产芯的硬核实力 作为瑞芯微2024年第四季度推出的入门级工业芯片平台,RK3506以三核Cortex-A7(1.…...

GLB文件介绍

GLB文件是由支持glTF(GL Transmission Format)标准的软件或工具生成的。glTF是一种开放的3D模型传输格式,而GLB是其二进制版本,通常用于嵌入纹理和模型数据。以下是常见的生成GLB文件的软件和工具: 1. 3D建模软件 • …...

树莓集团数字产业布局:商业智慧的多维呈现​

树莓集团在数字产业的布局展现其前瞻性的商业智慧,通过多维度的战略部署,构建一个 শক্তিশালী且富有活力的数字生态系统。 全国产业园布局:构建数字产业生态链 树莓集团通过在全国范围内建设产业园,有效整合资源&#x…...

“智改数转”新风口,物联网如何重构制造业竞争力?

一、政策背景 为深化制造业智能化改造、数字化转型、网络化联接,江苏省制定了《江苏省深化制造业智能化改造数字化转型网络化联接三年行动计划(2025-2027年)》,提出到2027年,全省制造业企业设备更新、工艺…...

代码随想录第55期训练营第八天|LeetCode344.反转字符串、541.反转字符串II、卡码网:54.替换数字

前言 这是我参加的第二次训练营!!!爽!这次我将更加细致的写清每一道难题,不仅是提升自己,也希望我自己的写的文章对读者有一定的帮助! 打卡代码随想录算法训练营第55期第八天(づ&a…...

c++ XML库用法

在C中,处理XML文件的读写操作可以通过多种库来实现。以下是几个常用且简洁的库: 1. ​TinyXML-2 ​简介: TinyXML-2 是一个轻量级的C XML解析库,易于使用且性能良好。​特点: 简单易用,API直观。内存占用小,适合嵌入…...

力扣算法Hot100——128. 最长连续序列

题目要求时间复杂度为O(n),因此不能使用两次循环匹配。 首先使用 HashSet 去重,并且 HashSet 查找一个数的复杂度为O(1)外循环还是遍历set集合,里面一重循环需要添加判断,这样才不会达到O( n 2 n^2 n2)判断是否进入最长序列查找循…...

spring-tx笔记

编程式事务与声明式事务的理解 补充:什么是事务? 事务是一个重要概念,尤其在数据库管理系统中。事务是指一组操作。,这些操作要么全部成功执行,要么全部不执行,确保数据的一致性和完整性 编程式事务 编…...

VulnHub-Web-Machine-N7通关攻略

一、信息收集 第一步:确定靶机IP为192.168.0.107 第二步:扫描后台及开放端口 第三步:进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…...

【PCIe 总线及设备入门学习专栏 3.1 -- PCIe 中为何只有 TLP 会被 Switch 和 RC 进行路由?】

文章目录 Overview为什么 DLLP 不需要路由呢?总结Overview 这里介绍些为什么在 PCIe 中只有 TLP(事务层数据包)会被 Switch 和 Root Complex(RC) 路由,而 DLLP(数据链路层数据包)和 Ordered Set 不会被路由。这是因为 TLP 起始于源端口的事务层,结束于目的端口的事务…...

3月21号

今天写了一些题: P1149 [NOIP 2008 提高组] 火柴棒等式 题目描述 给你 n 根火柴棍,你可以拼出多少个形如 ABC 的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 0∼9 的…...

以高斯(GaussDB) 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤

以下是使用 Windows 命令行(cmd) 操作 GaussDB(以 GaussDB(for openGauss) 社区版为例) 的详细步骤,涵盖 连接数据库、基本操作、关闭数据库 的全流程: 1. 环境准备 前提条件: 安装 GaussDB&a…...

Spring Boot 3 新特性实战:从理论到实践

引言 Spring Boot 自发布以来,凭借其简洁的配置和强大的功能,迅速成为 Java 开发者的首选框架。随着 Spring Boot 3 的发布,开发者们迎来了更多令人兴奋的新特性。本文将深入探讨 Spring Boot 3 的新特性,并通过实战示例展示如何…...

在 Linux 系统中,路径(Path)用于定位文件或目录的位置。路径分为两种类型:相对路径和绝对路径。它们的核心区别在于路径的起点不同

1. 绝对路径(Absolute Path) 定义: 从根目录 / 开始的完整路径,无论当前在哪个目录下,绝对路径都能唯一指向目标位置。 特点: 以 / 开头。明确且唯一,与当前所在目录无关。 示例: …...

AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用

文章目录 引言 1. 传统 API 的局限性2. MCP(模块化通信协议)的核心优势2.1 更好的模块化支持2.2 低耦合性与灵活性2.3 高性能数据传输2.4 适配分布式 AI 计算架构 3. AI 时代的 MCP 应用案例4. 结论:AI 时代的通信新范式 引言 在 AI 驱动的现…...

Jmeter旧版本如何下载

1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本:5.4.1...

XXE漏洞

一、XXE漏洞概述 1. 定义 XXE(XML External Entity Injection)即 XML外部实体注入漏洞,攻击者通过构造恶意XML数据,利用XML解析器的外部实体加载功能,实现 文件读取、内网探测、拒绝服务(DoS)…...

麒麟操作系统安装人大金仓数据库

如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 在当前数字化转型和信息安全备受重视的背景下,众多公司积极推进国产化改造进程。在操作系统领域,统信、open 欧拉、中标麒麟、银河麒麟等国产操作系统崭露头角,逐…...

嵌入式芯片与系统设计竞赛,值得参加吗?如何选题?需要学什么?怎么准备?

2025年全国大学生嵌入式芯片与系统设计竞赛已经正式启动,3月10日大赛通知正式下发,3月10日-19日各赛道的选题也陆续公布,4月25日大赛报名截止,感兴趣的同学可以及时关注! 大赛报名通知: 大赛通知丨2025年嵌…...

dfs刷题排列问题 + 子集问题 + 组和问题总结

文章目录 一、排列问题全排列II题解代码 优美的排列题解代码 二、子集问题字母大小写全排列题解代码 找出所有子集的异或总和再求和题解代码 三、组合问题电话号码的字母组合题解代码 括号生成题解代码 组合题解代码 目标和题解代码 组合总和题解代码 总结 一、排列问题 全排列…...

Win上安装Linux(虚拟机版)

目录 1、下载虚拟机Vmware Fusion 2、linux镜像文件下载(redhat版) 3、redhat镜像安装 4、第一次启动linux系统设置 1、下载虚拟机Vmware Fusion 下载地址:Vmware下载链接 2、linux镜像文件下载(redhat版) 官网…...

从零开发数据可视化

一、可视化模版展示 二、知识及素材准备 div css 布局flex布局Less原生js jquery 的使用rem适配echarts基础 相关js、images、font百度网盘下载链接: 通过百度网盘分享的文件:素材1 链接: https://pan.baidu.com/s/1vmZHbhykcvfLzzQT5USr8w?pwdwjx9…...

访问者模式

访问者(Visitor)模式属于行为型模式的一种。 访问者模式主要用于分离算法和对象结构,从而在不修改原有对象的情况下扩展新的操作。它适用于数据结构相对稳定,而操作(行为)容易变化的场景。 访问者模式允许…...

字符指针的三道例题+算法改进

目录 一.杨氏矩阵 1.初级 2.想把下标带回来 二.字符串左旋 算法改进 三.判断是否为字符串旋转结果 算法改进 四. 3个字符函数 1.strcat 2.strncat 3.strstr 一.杨氏矩阵 数字矩阵,每行从左到右递增,每列从上到下递增,编写程序在矩…...

zephyr-中国跨国并购数据(1997-2024.3.8)

Zephyr专注于提供关于跨国并购、合资和投资的数据。本次分享的Zephyr中国跨国并购数据,涵盖了从1997年到2024年3月8日的并购金额、交易类型、交易状态等详细交易记录,可为研究者分析并购趋势与模式、绩效等提供数据支持。 一、数据简介 数据名称&#x…...

UNIX网络编程笔记:套接字

套接字 什么是套接字(Socket)? 套接字(Socket) 是网络编程中的核心概念,可以理解为一种通信端点,用于实现不同设备之间的数据交换。它类似于现实中的“插座”,为应用程序提供了一套…...

协议-CAN-CANopen

是什么? 汽车工程师的总线协议为什么? 1980年代初期,由于没有可满足汽车工程师的总线协议,人们开始开发新的串行总线在底特律举行SAE会议上CAN总线诞生,称之为Automotive Serial Controller Area Network怎么做? 核心本质 两根线上特殊电平的特殊协议张嘴显性电平‘0’,…...

星越L_ 雨刷使用功能讲解

目录 1.向下拨动 2,向上拨动 3.调节雨刷的灵敏度 4.再次向上拨动 5.再向上 6.向内侧拨动 7.后雨刷开启 8.向外侧拨动 9.更换雨刷 1.向下拨动 雨刷单次工作 2,向上拨动 自动雨刷开启 3.调节雨刷的灵敏度 转动滚轮调节雨刷的灵敏度...

关于FastAPI框架的面试题及答案解析

FastAPl是一个现代、快速(高性能)的Web框架,用于构建API,基于Python3.7+的类型提示功能。它由Python开发者SebastianRamirez创建,并且使用了Starlette作为其核心组件以及Pydantic进行数据验证。 文章目录 基础篇1. FastAPI的核心优势是什么?2. 如何定义一个GET请求路由?…...

[7-01-03].SpringBoot3集成MinIo

MinIO学习大纲 一、Spingboot整合MinIo 第1步&#xff1a;搭建SpringBoot项目&#xff1a; 第2步&#xff1a;引入minio依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&q…...

一个KADB测试实践

测试结果 本文档描述xxxx测试中6个典型测试场景的测试结果及背景&#xff0c;旨在对不同数据量&#xff0c;不同存储方式&#xff0c;不同优化器三者的组合优化进行探索&#xff0c;进而为未来的类似测试提供组合优化参考。 数据插入&#xff08;500万&#xff09; 5进程批量…...

dockerSDK-Go语言实现

前情提要 本文基于开发一个在线代码运行平台的项目需求上&#xff0c;所以需要挂载目录以达到获得执行文件的目的。 步骤1 首先在docker-compose 文件中&#xff0c;当前容器一定要跟宿主机的套接字进行挂载 version: 3.8 services: code-runner-api: build: context: . d…...

使用excel.EasyExcel实现导出有自定义样式模板的excel数据文件,粘贴即用!!!

客户要求导出的excel文件是有好看格式的&#xff0c;当然本文举例模板文件比较简单&#xff0c;内容丰富的模板可以自行设置&#xff0c;话不多说&#xff0c;第一步设置一个"好看"的excel文件模板 上面要注意的地方是{.变量名} &#xff0c;这里的变量名对应的就是…...

C++ string的模拟实现

Hello!!大家早上中午晚上好&#xff0c;昨天复习了string的使用&#xff0c;今天来模拟实现一下string&#xff01;&#xff01;&#xff01; 一、string的框架搭建 1.1首先我们需要一个string的头文件用来做变量、函数、类等声明&#xff1b;再需要一个test文件来做测试,还需…...

Spring AI Alibaba ChatClient使用

一、ChatClient简介 Chat Client&#xff1a;https://java2ai.com/docs/1.0.0-M5.1/tutorials/chat-client/ 1、ChatClient 简介 ChatClient 提供了与 AI 模型通信的 Fluent API&#xff0c;它支持同步和反应式&#xff08;Reactive&#xff09;编程模型。与 ChatModel、Messag…...

算法及数据结构系列 - 二分查找

系列文章目录 算法及数据结构系列 - BFS算法 文章目录 二分查找框架思路经典题型二分查找寻找左侧边界寻找右侧边界 刷题875. 爱吃香蕉的珂珂1011. 在 D 天内送达包裹的能力392. 判断子序列 二分查找 框架思路 int binarySearch(int[] nums, int target) {int left 0, righ…...

回归任务训练--MNIST全连接神经网络(Mnist_NN)

import torch import numpy as np import logging from torch.utils.data import TensorDataset, DataLoader from torch.utils.data import DataLoader# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 定义 loss_batch…...

SvelteKit 最新中文文档教程(8)—— 部署 Node 服务端

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …...

【Linux】VMware17 安装 Ubuntu24.04 虚拟机

目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址&#xff1a;ubuntu-24.04.2-des…...

Python functools 模块的 @lru_cache 装饰器介绍

functools.lru_cache 是 Python 标准库 functools 模块中的一个装饰器&#xff0c;用于实现简单的缓存机制。它通过缓存函数的返回值来提高函数的执行效率&#xff0c;特别是对于那些被多次调用且参数相同的函数。 LRU 缓存机制 LRU 代表 Least Recently Used&#xff0c;即最…...

JavaScript基础-节点操作

在Web开发中&#xff0c;动态地修改网页内容是提升用户体验的重要手段之一。通过JavaScript操作DOM&#xff08;文档对象模型&#xff09;中的节点&#xff0c;我们可以轻松地实现这一目标。本文将介绍JavaScript中关于节点操作的基础知识&#xff0c;涵盖创建新节点、插入节点…...

【数据分享】2000—2024年我国乡镇的逐月归一化植被指数(NDVI)数据(Shp/Excel格式)

之前我们分享过2000—2024年我国省市县三级逐月归一化植被指数&#xff08;NDVI&#xff09;数据&#xff0c;该数据是基于NASA定期发布的MOD13A3数据集中的月度NDVI栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;计算得出。很多小伙伴拿到数据后反馈是否可以处理出…...