jvm内存模型,类加载机制,GC算法,垃圾回收器,jvm线上调优等常见的面试题及答案
JVM内存模型
- JVM内存模型包括哪些区域
- 答案:JVM内存模型主要包括以下区域:
- 程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节码指令的地址。
- Java虚拟机栈:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
- 本地方法栈:与Java虚拟机栈类似,不过它是为Native方法服务的。
- Java堆:是JVM所管理的内存中最大的一块,是被所有线程共享的一块内存区域,几乎所有的对象实例以及数组都在这里分配内存。
- 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。在Java 8及之后版本中,永久代被移除,取而代之的是元空间,元空间并不在堆内存中,而是使用本地内存。
- 答案:JVM内存模型主要包括以下区域:
- 堆内存的结构是怎样的
- 答案:堆内存分为年轻代和老年代,年轻代又分为Eden空间和两个Survivor空间(一般称为Survivor from和Survivor to)。新创建的对象一般会先分配到Eden区,当Eden区满了之后,会触发Minor GC,存活下来的对象会被移动到Survivor区。在Survivor区经过多次GC后仍然存活的对象,会被移动到老年代。老年代主要存放生命周期较长的对象。
类加载机制
- 什么是类加载
- 答案:类加载是指将Java类的字节码文件(.class文件)转换成内存中运行时数据结构(如java.lang.Class对象)的过程。这个过程由Java虚拟机的类加载器完成,是Java动态性的基础。
- 类加载的时机有哪些
- 答案:Java虚拟机采用惰性加载策略,类会在以下几种情况下被加载:
- 创建类的实例,通过new关键字或反射机制。
- 访问类的静态变量或静态方法,注意是主动访问。
- 反射调用,如通过Class.forName()等方法显式加载类。
- 初始化类的子类,此时父类也会被加载(若尚未加载)。
- JVM启动时指定的主类,即包含main方法的类。
- 答案:Java虚拟机采用惰性加载策略,类会在以下几种情况下被加载:
GC算法
- GC有哪些常见的判定对象可回收的方法
- 答案:
- 引用计数法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1,当计数器为0时,就认为这个对象可以被回收。但这种方法存在循环引用的问题,导致对象无法被回收。
- 可达性分析算法:通过一系列的“GC Roots”对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,即可以被回收。
- 答案:
- GC的三种收集方法及其原理与特点
- 答案:
- 标记-清除算法:分为标记和清除两个阶段。首先标记出所有需要回收的对象,在标记完成后,统一回收所有被标记的对象。优点是实现简单,缺点是容易产生内存碎片,导致后续大对象无法分配内存。
- 复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。优点是不会产生内存碎片,缺点是内存利用率低,只使用了一半的内存。
- 标记-压缩(标记-整理)算法:标记阶段和标记-清除算法一样,标记出所有需要回收的对象,清除阶段不是直接清理被标记的对象,而是将所有存活的对象向一端移动,然后直接清理掉边界以外的内存。优点是解决了内存碎片问题,同时内存利用率比复制算法高,缺点是移动对象时需要一定的开销。
- 答案:
垃圾回收器
- 常见的垃圾回收器有哪些
- 答案:常见的垃圾回收器有Serial、Serial Old、ParNew、Parallel Scavenge、Parallel Old、CMS、G1等。
- CMS收集器与G1收集器的特点
- 答案:
- CMS收集器:是一种以获取最短回收停顿时间为目标的收集器。采用“标记-清除”算法,具有并发收集、低停顿的特点,但是会产生内存碎片,并且对CPU资源非常敏感,在并发阶段会和用户线程抢占CPU资源。
- G1收集器:是一种面向堆内存任何部分进行回收的收集器,将堆内存划分为多个大小相等的独立区域(Region),可以预测停顿时间,兼具高吞吐量和低延迟的特点,采用“标记-整理”算法,不会产生内存碎片,能更好地处理大对象和巨型对象。
- 答案:
JVM线上调优
- 什么情况下需要进行JVM调优
- 答案:出现以下情况时通常需要进行JVM调优:
- Heap内存(老年代)持续上涨达到设置的最大内存值。
- Full GC次数频繁。
- GC停顿(Stop The World)时间过长(超过1秒,具体值按应用场景而定)。
- 应用出现OutOfMemory等内存异常。
- 应用中有使用本地缓存且占用大量内存空间。
- 系统吞吐量与响应性能不高或下降。
- 应用的CPU占用过高不下或内存占用过高不下。
- 答案:出现以下情况时通常需要进行JVM调优:
- JVM调优时关注哪些指标
- 答案:
- 吞吐量:用户代码时间/(用户代码执行时间+垃圾回收时间),吞吐量越高算法越好。
- 低延迟:STW越短,响应时间越好,暂停时间越短算法越好。
- Minor GC尽可能多的收集垃圾对象:遵守这一原则可以降低应用程序Full GC的发生频率,因为Full GC较耗时,可能会影响应用程序的延迟要求或吞吐量。
- 答案:
相关文章:
jvm内存模型,类加载机制,GC算法,垃圾回收器,jvm线上调优等常见的面试题及答案
JVM内存模型 JVM内存模型包括哪些区域 答案:JVM内存模型主要包括以下区域: 程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节码指令的地址。Java虚拟机…...
[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)
[Windows] 极限投屏_正式版 链接:https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future): 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…...
C++初阶—list类
第一章:list的介绍及使用 1.1 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指…...
【子网掩码计算器:Python + Tkinter 实现】
子网掩码计算器:Python Tkinter 实现 引言代码功能概述代码实现思路1. 界面设计2. 功能实现3. 事件处理 子网掩码计算器实现步骤1. 导入必要的库2. 定义主窗口类 SubnetCalculatorApp3. 创建菜单栏4. 创建界面组件5. 判断 IP 地址类别6. 计算子网信息7. 其他功能函…...
入门基础项目(SpringBoot+Vue)
文章目录 1. css布局相关2. JS3. Vue 脚手架搭建4. ElementUI4.1 引入ElementUI4.2 首页4.2.1 整体框架4.2.2 Aside-logo4.2.3 Aside-菜单4.2.4 Header-左侧4.2.5 Header-右侧4.2.6 iconfont 自定义图标4.2.7 完整代码 4.3 封装前后端交互工具 axios4.3.1 安装 axios4.3.2 /src…...
Nginx+PHP+MYSQL-Ubuntu在线安装
在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步骤如下: 1. 更新系统包 首先,确保系统包是最新的: sudo apt update sudo apt upgrade2. 安装 Nginx 安装 Nginx: sudo apt install nginx启动并启用 Nginx 服务: sudo…...
车载以太网-基于linux的ICMP协议
对于车载以太网-ICMP的技术要求: /** ICMP报文格式解析* -----------------* ICMP协议用于网络诊断和错误报告,常见应用包括Ping测试。* ICMP报文结构包括:IP头部、ICMP头部和ICMP数据部分。* 下面详细介绍每个部分的结构、字段的作用以及如何解析它们。* * ICMP头部结构:*…...
虚拟机快照与linux的目录结构
虚拟机快照是对虚拟机某一时刻状态的完整捕获,包括内存、磁盘、配置及虚拟硬件状态等,保存为独立文件。 其作用主要有数据备份恢复、方便系统测试实验、用于灾难恢复以及数据对比分析。具有快速创建和恢复、占用空间小、可多个快照并存的特点。在管理维…...
Unity小功能实现:鼠标点击移动物体
1、功能描述 当玩家点击鼠标时,场景中的物体会移动到鼠标点击的位置。这个功能可以用于控制角色移动、放置物体等场景。 2、实现步骤 创建Unity项目:首先,打开Unity并创建一个新的3D项目。 添加3D物体:在场景中创建一个3D物体&am…...
算法题笔记(自用)——Python
目录 一. 进制&位运算&ASCAII 二. format格式化输出 1. 基本用法 2. 位置参数 3. 格式化数字 4. 对齐和填充 5. 格式化二进制、八进制、十六进制 6. 格式化百分比 7. 格式化科学计数法 8. 格式化字符串字面量(f-string) 三. 字符串 使…...
爬虫系列之【数据解析之JSON】《三》
目录 前置知识 一、 json.loads():JSON 转 Python 数据 二、json.dump():python数据 转 json 并写入文件 三、json.loads() :json 转 python数据 四、json.load() :json 转 python数据(在文件操作中更方便…...
了解Java集合的概念和体系:Collection<T>、Collections与Stream的使用
学习目标 本文知识是对集合层级的介绍,应用开发中实际使用的是他们的子级,感兴趣的小伙伴或者想深入了解有关Java集合知识的朋友可以选择阅读! Stream的方法使用使用部分代码块内大多有两种实现方式,是为了更好的理解方法底层的代…...
进程优先级和进程切换 ─── linux第12课
目录 Z(zombie)-僵尸进程 僵尸进程危害 孤儿进程 编辑 进程优先级 查看系统进程 用top命令更改已存在进程的nice: 其他概念 进程切换 进程如何切换 进程的调度 进程 内核数据结构 代码和数据 创建进程时 ,先创建内核数据结构 再加载代码和数据 进程退…...
光速解决phpstudy无法启动MySQL服务
问题描述 在初步安装使用phpstudy时,会出现mysql服务启动失败的情况,具体表现为点击一键启动后,mysql启动又立即停止 原因及解决方法: phpstudy数据库无法启动有以下几个原因,可以看看自己是第几种: 服务名…...
深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析
# 深度学习五虎将:当CNN遇见Transformer的奇幻漂流 ## 序章:AI江湖的兵器谱排行 2012年,多伦多大学的厨房里,Hinton的学生们用GPU煎了个"AlexNet"荷包蛋,从此开启了深度学习的热兵器时代。如今五大模型各显…...
txt 转 json 使用python语言
需求: 把如下的txt文档转成json输出 代码 import jsondef txt_to_json(input_file, output_file):data_list []with open(input_file, r, encodingutf-8) as f:for line in f:# 分割数据并去除换行符parts line.strip().split(,)print(f"{parts}")print(type(par…...
FPGA开发,使用Deepseek V3还是R1(4):Deepseek参数配置
以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&…...
Cargo, the Rust package manager, is not installed or is not on PATH.
今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错,Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网:https://rustup.rs/# 下载:https://win.rustup.rs/x86_64 安装完成之后,…...
Go开发框架Sponge+AI助手协同配合重塑企业级开发范式
在互联网高速发展的今天,企业级应用系统面临着日益复杂的业务逻辑和不断增长的开发需求。如何在保证高质量、高效率的前提下快速交付项目,成为了开发者亟需解决的问题。本文将详细介绍如何利用开源的 go 开发框架 Sponge 与 AI 助手协同配合全过程&#…...
从递归到动态规划(三维)
问题描述 假设有一个三维空间的网格,其大小为 m x n x p。我们从坐标 (0, 0, 0) 出发,要到达坐标 (m - 1, n - 1, p - 1)。每次只能在三个方向上移动:向前(x 坐标加 1)、向右(y 坐标加 1)或向上…...
JavaWeb个人笔记
技术栈 前端 : HTML CSS JavaScript ES6 Nodejs npm vite vue3 router pinia axios element-plus 后端:HTTP xml Tomcat Servlet Request Response Cookie Sesssion Filter Listener MySQL JDBC Druid Jackson lombok jwt . HTML <!DOCTYPE html> 文档声…...
【vue-echarts】——01.认识echarts
文章目录 前言一、echarts二、使用步骤1.vue cli创建项目并安装第三方模块echarts2.显示图表总结前言 定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。2021年1月26日晚,Apache基金会官方宣布ECharts项目正式毕业。 一…...
http报文的content-type参数和spring mvc传参问题
很早之前博主聊过HTTP的报文结构以及其中和传参相关的重要参数content-type还有spring mvc,以前的三篇文章: HTTP与HTTPS协议详解:基础与安全机制-CSDN博客 详解Http的Content-Type_content-type application-CSDN博客 如何在Spring Boot中…...
005 公网访问 docker rocketmq
文章目录 创建自定义网络创建NameServer容器创建Broker容器正式开始启动 Nameserver 容器启动 Broker 容器并关联 Nameserverdocker exec -it rmqbroker vi /etc/rocketmq/broker.conf检查 namesrv 解析检查 Broker 注册状态Nameserver 日志Broker 日志检查容器日志手动指定 Br…...
14. LangChain项目实战1——基于公司制度RAG回答机器人
教学视频: 12. 基于Gradio搭建基于公司制度RAG_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11VXRYTErZ/ 环境配置: python版本:3.10.8 服务器:Ubuntu 依赖包requirements.txt文件内容: aiofiles23.2.1 …...
FPGA开发,使用Deepseek V3还是R1(6):以滤波器为例
以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…...
JVM常用概念之垃圾回收设计与停顿
在我们应用程序运行期间,我们是需要尽可能避免垃圾回收。 图1:不同垃圾回收器的设计(黄色代表STW,绿色代表并发) 实验 计算机配置 Hardware Overview:Model Name: MacBook ProModel Identifier: MacBookPro14,2Pro…...
uniapp-原生android插件开发摘要
uni-app在App侧的原生扩展插件,支持使用java、object-c等原生语言编写,从HBuilderX 3.6起,新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…...
Python之参数星号(*)使用笔记
背景 在学习python时发现方法调用和方法定义会经常发现有带星号的标记,为了弄明白是怎么使用的。特此做个笔记。 一、参数符号对比速查表 符号类使用场景作用描述示例无符号函数定义/调用普通位置参数或关键字参数.def func(a, b)*函数定义收集多余位置参数为元组…...
2025年AI网络安全攻防战:挑战深度解析与全链路防御体系构建指南
2025年AI网络安全攻防战:挑战深度解析与全链路防御体系构建指南 引言:AI技术是一把双刃剑 随着ChatGPT、Sora等生成式AI技术的爆发式应用,2025年被称为“AI应用元年”。然而,AI在赋能网络安全防御的同时,也为攻击者提供了新型武器。根据瑞星《2024年中国网络安全报告》,…...
