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):分区回收,兼顾吞吐量和延迟。
-
ZGC和Shenandoah:超低延迟,适合大内存应用。
-
-
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相关。
-
排查方法:使用
jmap、jstack等工具分析内存快照和线程栈。
-
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中是如何创建和回收的?
-
答案:
-
创建:
-
检查类是否加载。
-
分配内存(指针碰撞或空闲列表)。
-
初始化对象头(如哈希码、GC分代年龄)。
-
执行构造函数。
-
-
回收:
-
标记不再使用的对象。
-
清除或整理内存。
-
-
12. 逃逸分析
-
问题:什么是逃逸分析?它的作用是什么?
-
答案:
-
逃逸分析是JVM优化技术,用于分析对象的作用域是否逃逸出方法或线程。
-
作用:
-
栈上分配:将对象分配在栈上,减少堆压力。
-
同步消除:消除不必要的同步操作。
-
标量替换:将对象拆分为基本类型变量。
-
-
相关文章:
JVM常见面试总结
JVM(Java虚拟机)是Java程序运行的核心,掌握JVM相关知识对于Java开发者至关重要。以下是JVM常见的面试问题总结: 1. JVM内存模型 问题:JVM的内存结构分为哪些部分? 答案: 方法区(Met…...
美团Leaf分布式ID生成器使用教程:号段模式与Snowflake模式详解
引言 在分布式系统中,生成全局唯一ID是核心需求之一。美团开源的Leaf提供了两种分布式ID生成方案:号段模式(高可用、依赖数据库)和Snowflake模式(高性能、去中心化)。本文将手把手教你如何配置和使用这两种…...
python3.13.2安装详细步骤(附安装包)
文章目录 前言一、python3.13.2下载二、python3.13.2安装详细步骤1.查看安装文件2.启动安装程序3.安装模式选择4.自定义安装配置5.高级选项设置6.执行安装7.开始安装8.安装完成8.打开软件9.安装验证 前言 在数字化时代,Python 已成为不可或缺的编程语言。无论是开发…...
AI-Talk开发板之更换串口引脚
一、默认引脚 CSK6011A使用UART0作为Debug uart,AI-Talk开发板默认使用的GPIOA2和GPIOA3作为Debug uart的RX和TX,通过连接器CN6引出。 二 、更换到其它引脚 查看60xx_iomux_v1.0可以,UART0的tx和rx可以映射到很多管脚上。 结合AI-Talk开发板…...
深度解读DeepSeek:源码解读 DeepSeek-V3
深度解读DeepSeek:开源周(Open Source Week)技术解读 深度解读DeepSeek:源码解读 DeepSeek-V3 深度解读DeepSeek:技术原理 深度解读DeepSeek:发展历程 文章目录 整体流程模型初始化模型前向传播MoE https:/…...
JavaIO流的使用和修饰器模式(直击心灵版)
系列文章目录 JavaIO流的使用和修饰器模式 文章目录 系列文章目录前言一、字节流: 1.FileInputStream(读取文件)2.FileOutputStream(写入文件) 二、字符流: 1..基础字符流:2.处理流:3.对象处理流:4.转换流: 三、修饰器…...
爬虫入门re+bs4
目录 前言 1. 导入必要的库 2. 定义获取网页HTML内容的函数 get_html 3. 定义获取数据的函数 get_data 4. 定义获取文章正文内容的函数 content_text 5. 定义获取单条课程数据的函数 get_one_course_data 6. 定义保存数据的函数 save_data 7. 定义文件名合法化处理函数 sanitiz…...
【WebGL】texImage2D函数
参数 从像素数据加载纹理 gl.texImage2D(target, level, internalformat, width, height, border, format, type, source);从图像元素加载纹理 gl.texImage2D(target, level, internalformat, format, type, image);target gl.TEXTURE_2D(2D 纹理) T…...
北斗设备启动流程与时长解析
北斗卫星导航系统作为我国自主研发的全球卫星导航系统,广泛应用于交通、通信、农业等多个领域。今天,我们就来详细探讨一下北斗设备的启动流程以及不同启动方式下的时长。 一、北斗设备的启动流程 北斗设备的启动流程可以分为以下几个关键步骤…...
MySQL身份验证的auth_socket插件
在Ubuntu 20.04 LTS上,MySQL 8.0默认使用auth_socket插件进行身份验证,可能存在意想不到的情况。 一、auth_socket插件 在使用sudo mysql或通过sudo切换用户后执行任何MySQL命令时,不需要输入密码或错误密码都可以正常登入mysql数据库&…...
openstack安装部署
在OpenStack的安装和部署中,你需要按照一定的步骤来完成整个环境的搭建。OpenStack是一个开源的云计算平台,它提供了基础设施即服务(IaaS)的能力,包括计算、存储和网络等资源的管理。下面是一些基本的步骤来安装和部署…...
【日志库】—— log4cpp 部署套路
部署: 1、安装log4cpp,执行如下指令进行编译安装 log4cpp的官网是: http://log4cpp.sourceforge.net/ wget https://nchc.dl.sourceforge.net/project/log4cpp/log4cpp-1.1.x%20%28new%29/log4cpp-1.1/log4cpp-1.1.3.tar.gz tar xzvf log4cpp…...
使用Gitee Go流水线部署个人项目到服务器指南
使用Gitee Go流水线部署个人项目到服务器指南 前言!!! 本文解决的问题: 你有一台ECS服务器,你在上面部署了一个Java服务也就是一个jar,你觉着你每次手动本地打包,上传,在通过命令去…...
BlockChain.java
BlockChain 区块链,举个栗子 注意啦,列子里面的hashcode相等,但是字符串是不一样的哦,之前有记录这个问题 String.hashCode()-CSDN博客...
SystemVerilog 数据类型
1、内建数据类型 verilog有两种基本的数据类型:变量和线网,他们各自都可以有四种取值:0 1 z x; RTL代码使用 变量 来存放组合和时序值;变量可以是单bit或者是多bit的无符号数 reg [7:0] m, 32bit的有符号…...
【技术简析】触觉智能RK3506 Linux星闪网关开发板:重新定义工业物联新标杆
在工业智能化与物联网深度融合的今天,深圳触觉智能推出首款搭载瑞芯微RK3506芯片的Linux星闪网关开发板,为大家技术解析。 RK3506-国产芯的硬核实力 作为瑞芯微2024年第四季度推出的入门级工业芯片平台,RK3506以三核Cortex-A7(1.…...
YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
面向对象(进阶)(‘封装‘,‘多态‘,‘对象属性‘,‘类属性‘,‘类方法‘,‘对象方法‘及其应用场景)
‘封装’,多态’及其应用场景 一, 封装及其应用场景 封装的定义 属于面向对象的三大特征之一, 就是隐藏对象的属性和现实细节, 仅对外提供公共的访问方式.(我们学的 函数, 类, 都是封装的体现). 封装的格式 __属性名 __属性名()封装的好处和弊端 好处 提高代码的安全性.…...
django如何配置使用asgi
以下是 Django 配置使用 ASGI 的完整指南: 一、配置前提 Django 版本:确保使用 Django 3.0(原生支持 ASGI)必要依赖:pip install daphne channels二、基础配置步骤 1. 创建/修改 ASGI 入口文件 在 Django 项目根目录…...
MongoDB 只能存储能够序列化的数据(比如字符串、数字等),而 Python 的 UUID 对象并不是直接可以存入数据库的格式。
1. UUID 对象是什么? UUID 是 “Universally Unique Identifier”(通用唯一识别码)的缩写,是一种 128 位的数字,用于在全局范围内生成一个唯一的标识符。它常用于数据库中的记录标识、分布式系统中的对象标识等场景。…...
分页优化之——游标分页
游标分页(Cursor-based Pagination) 是一种高效的分页方式,特别适用于大数据集和无限滚动的场景。与传统的基于页码的分页(如 page1&size10)不同,游标分页通过一个唯一的游标(通常是时间戳或…...
算法模型从入门到起飞系列——广度优先遍历(BFS)
文章目录 前言一、广度优先遍历(BFS)简介1.1 广度优先遍历(BFS)的特点1.2 广度优先遍历(BFS)的要素 二、广度优先遍历(BFS)& 深度优先遍历(DFS)2.1 广度优…...
AsyncHttpClient使用说明书
[[toc]] AsyncHttpClient(AHC)是一个高性能、异步的 HTTP 客户端库,广泛用于 Java 和 Scala 应用中,特别适合处理高并发、非阻塞的 HTTP 请求。它基于 Netty 或 Java 原生的异步 HTTP 客户端实现,支持 HTTP/1.1 和 HTTP/2 协议,适用于微服务、API 调用、爬虫等场景。 1.…...
FRP在远程办公中的实战应用
远程办公场景中,FRP可穿透企业防火墙,安全访问内网资源。以下是典型用例: SSH远程连接 配置示例: 客户端配置SSH映射,将本地22端口映射至公网服务器的6000端口,用户通过ssh -p 6000 user公网IP即可连接内网…...
git 设置保存密码 git保存密码
目录 长久保存密码 长久保存密码 git push和git pull都能使用。 git config --global credential.helper store 然后执行一次 git pull,Git 会提示输入用户名和密码, 输入后保存路径: ~/.git-credentials , Windows系统&…...
<项目> 主从Reactor模型的高并发服务器
目录 Reactor 概念 分类 单Reactor单线程 单Reactor多线程 多Reactor多线程 项目介绍 项目规划 模块关系 实现 TimerWheel -- 时间轮定时器 定时器系统调用 时间轮设计 通用类型Any Buffer Socket Channel Poller EventLoop(核心) eventfd 设计思路 …...
注意力机制,本质上是在做什么?
本文以自注意机制为例,输入一个4*4的矩阵 如下: input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时,计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…...
使用Python在Word中创建、读取和删除列表 - 详解
目录 工具与设置 Python在Word中创建列表 使用默认样式创建有序(编号)列表 使用默认样式创建无序(项目符号)列表 创建多级列表 使用自定义样式创建列表 Python读取Word中的列表 Python从Word中删除列表 在Word中ÿ…...
右键添加:新建HTML模板文件
使用注册表给Windows右键添加:新建HTML文档模板的功能_注册表右键新建-CSDN博客 新建文件有了,但是没有引用模板文件,是空文件。 默认改成 htmlfile 模板成功...
Windows10配置OpenJDK11
下载 # 华为OpenJDK镜像源 https://mirrors.huaweicloud.com/openjdk/11.0.2/解压 # 解压后至于C:\Dev\Env\Java\jdk-11.0.2目录下 https://mirrors.huaweicloud.com/openjdk/11.0.2/openjdk-11.0.2_windows-x64_bin.zip编译安装 # 以管理员身份运行 CMD命令提示符 并进入JD…...
