3.Java面试题—JVM基础、内存管理、垃圾回收、JVM 调优

news2024/11/17 17:46:31

本文目录如下:

  • 七、JVM
    • 一、JVM 基础
      • 什么是Java虚拟机?
      • Java对象 创建过程?
      • 对象有哪几种引用?
    • 二、内存管理
      • 说⼀下 JVM 的内存区域 (堆 和 栈)?
      • 内存溢出 和 内存泄漏 是什么意思?
      • 内存泄漏可能由哪些原因导致呢?
      • Java 堆的内存分区了解吗?
      • 对象什么时候会进⼊⽼年代?
    • 三、垃圾回收
      • 垃圾收集算法了解吗?
      • 什么是 Stop The World?
      • Minor GC、Major GC、Full GC 都是什么意思?
      • Minor GC 什么时候触发?
      • Major GC 和 Full GC 触发条件一般为:
      • 对象什么时候会进入老年代?
      • 知道有哪些垃圾收集器吗?
      • 能详细说⼀下 CMS 收集器的垃圾收集过程吗?
      • G1 垃圾收集器了解吗?
      • 有了 CMS,为什么还要引入 G1?
    • 四、JVM 调优
      • 有哪些常用的命令行 性能监控 工具?
      • 频繁 Minor GC 怎么办?

七、JVM

一、JVM 基础

一篇文章掌握整个JVM,JVM超详细解析!!!

什么是Java虚拟机?

  • Java虚拟机(JVM) 是用来 解析和运行Java程序 的一种 虚拟机
  • 编译器Java ⽂件 编译成 平台无关Java 字节码文件 (.class),对应平台 JVM字节码文件 翻译成 机器指令 并运⾏。

Java对象 创建过程?

  • 加载类
  • 分配内存
  • 初始化默认值
  • 设置对象头: 运行时数据(GC标志位等)、对象指针数组长度
  • 执行初始化方法

对象有哪几种引用?

  • 强引用:代码中普遍存在的 赋值引用强引用 关联的对象,不会被 垃圾收集器 回收。
  • 软引用强引用对象 置空 (NULL),保留 软引用软引用 关联的对象,二次回收 时进行回收。
  • 弱引用强引用对象 置空 (NULL),保留 软引用弱引用 关联的对象,会被 垃圾收集器 回收。
  • 虚引用:最弱的⼀种 引用关系,不会影响对象的 ⽣存时间

二、内存管理

说⼀下 JVM 的内存区域 (堆 和 栈)?

  • 程序计数器:保存当前线程所正在执行的 字节码指令的地址(行号)
  • 栈内存线程私有。方法执行时,Java 虚拟机栈 会同步创建⼀个 栈帧,⽤来存储 局部变量表操作数栈 等。
  • 堆内存线程共享堆内存 用于存放 对象实例 (垃圾收集器 管理的内存区域,也称 GC堆)。
  • 方法区线程共享。存储已被 虚拟机 加载的 类信息常量静态变量 等数据。
    在这里插入图片描述

内存溢出 和 内存泄漏 是什么意思?

  • 内存泄露:申请的 内存空间 没有被正确释放,导致 内存被占用
  • 内存溢出:就是申请的内存超过了 可用内存内存不够了

内存泄漏可能由哪些原因导致呢?

  • 静态集合类:静态集合的 生命周期JVM ⼀致,所以静态集合 引用的对象 不能被释放
  • 单例模式
  • 连接(IO/数据)未释放

Java 堆的内存分区了解吗?

  • Java 堆 划分为 新生代老年代 两个区域。
  • 新⽣代 存放 存活时间短 的对象,每次 垃圾回收 后存活的对象,将会逐步存放到 老年代
  • 新⽣代 又可以分为三个区域:edenfromto,⽐例是 8:1:1

对象什么时候会进⼊⽼年代?

三、垃圾回收

垃圾收集算法了解吗?

  • 标记-清除算法
  • 标记-整理算法
  • 复制

什么是 Stop The World?

垃圾回收 时,会涉及 对象的移动。为了保证 对象引用 的正确性,必须 暂停所有线程,这样的停顿被称为 Stop The World。简称 STW


Minor GC、Major GC、Full GC 都是什么意思?

  • Minor GC (新生代GC)Minor GC 非常频繁回收速度 也比较快。
  • Major GC (老年代GC):通常执行 Major GC 会连着 Minor GC 一起执行。Major GC速度 要比 Minor GC 慢的多。
  • Full GC:对整个 Java 堆⽅法区 进行 垃圾回收

Minor GC 什么时候触发?

新创建的对象 优先在 新生代 Eden 区 进行分配,如果 Eden 区 没有足够的空间时,就会触发 Minor GC 来清理新生代。


Major GC 和 Full GC 触发条件一般为:

  • 晋升到老年代的对象 平均大小 > 老年代 剩余空间
  • Minor GC 后存活的对象超过了老年代剩余空间。
  • 老年代 空间不足
  • 执行 System.gc()

对象什么时候会进入老年代?

  • ⻓期存活的对象将进入老年代:每次 Minor GC 后对象的年龄会增加,当年龄到达 15 (默认) 之后,对象会被移入 老年代
  • ⼤对象直接进⼊老年代

知道有哪些垃圾收集器吗?

  • CMS收集器老年代的收集器,采⽤ 标记-清除算法回收停顿时间 最短。
  • G1收集器:开创了 局部收集的设计思路基于Region 的内存布局形式

能详细说⼀下 CMS 收集器的垃圾收集过程吗?

CMS 垃圾收集分为四步:

  1. 初始标记:标记 GC Roots直达的对象。需要 STW
  2. 并发标记:从 GC Roots 直达对象开始遍历整个对象图,找出要 回收的对象
  3. 重新标记:标记 并发标记阶段 产生的对象。需要 STW
  4. 并发清除:清理掉 标记阶段 标记的对象。

G1 垃圾收集器了解吗?

G1 收集器的运⾏过程⼤致可划分为以下四个步骤:

  1. 初始标记:标记 GC Roots直达的对象。需要 STW
  2. 并发标记:从 GC Roots 直达对象开始遍历整个对象图,找出要 回收的对象
  3. 最终标记:标记 并发标记阶段 产生的对象。需要 STW
  4. 筛选回收:选择多个 Region 构成 回收集,把回收集中 Region存活对象 复制到 空的 Region 中,再清理掉 旧 Region 的全部空间。需要 STW

有了 CMS,为什么还要引入 G1?

G1 主要解决了 内存碎片过多 的问题。

  • CMS 并发清除阶段 会导致 内存碎片比过多
  • CMS 并发清除阶段,用户线程依然在运行,会产生 浮动垃圾浮动垃圾 必须到 下⼀次垃圾收集 才能处理。浮动垃圾 太多会触发 新的垃圾回收,导致 性能降低

四、JVM 调优

有哪些常用的命令行 性能监控 工具?

操作系统工具:

  • top:显示 系统资源 使用情况
  • vmstat:监控 内存CPU
  • iostat:监控 IO 使⽤
  • netstat:监控 网络 使⽤

频繁 Minor GC 怎么办?

通常情况下,如果 新生代 空间较小,Eden 区 很快会被填满,就会导致 频繁 Minor GC,因此可以通过 增大新生代空间 -Xmn 来降低 Minor GC 的频率。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OceanMind海睿思助力南京钢铁苏粮集团入选中国信通院审计“领航”案例

近日,由中国内部审计协会指导,中国信息通信研究院主办的2023年内部审计数字化转型“领航”案例征集结果公布。 其中,中新赛克海睿思参与建设的《南京钢铁-基于数字化审计为核心的全域风控管理》入选标杆案例,《苏粮集团-风控内控合…

Vue中使用echarts

1 安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install echarts -S 2 main.js引入 3 引入成功

C++ 成员初始化列表

如果数据成员是常量或者引用的情况&#xff1a; 1.常量和引用不可以在构造函数中进行赋值&#xff1a; #include<iostream> using namespace std; class A { public:A(int i 0){m_i 10;m_j 30; //error 这一句代码叫做赋初值m_k m_i; //error} private:int m_i;/…

openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符

文章目录 openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符23.1 时间日期操作符23.2 时间/日期函数23.3 TIMESTAMPDIFF23.4 EXTRACT23.5 date_part openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符 23.1 时间日期操作符 用户在使用时…

Appium+python自动化(三十三)- 本地调试测试代码,远程控制测试环境-Remote(超详解)

简介 在前边所有涉及启动app的时候有这样一行代码driver webdriver.Remote(http://127.0.0.1:4723/wd/hub, desired_caps)&#xff0c;很多小伙伴们和同学们不知道这个ip和端口哪里来的&#xff0c;我觉得有必要给小伙伴解释一下&#xff0c;于是决定写一篇关于这个appium的服…

直播美颜技术的未来:美型SDK的前沿探索

一、时代背景 随着社交媒体和视频直播的兴起&#xff0c;直播美颜技术的需求日益增长。从简单的滤镜效果到人脸美颜算法的应用&#xff0c;这一领域一直在迅速发展。然而&#xff0c;美型SDK的问世标志着直播美颜技术的新篇章&#xff0c;它以更加精细化的处理和更强大的功能&…

使用win10专业版自带远程桌面公司内网电脑

在现代社会中&#xff0c;各类电子硬件已经遍布我们身边&#xff0c;除了应用在个人娱乐场景的消费类电子产品外&#xff0c;各项工作也离不开电脑的帮助&#xff0c;特别是涉及到数据采集和储存的场景&#xff08;如安保监控、自动化流程等等&#xff09;&#xff0c;更是离不…

大数据课程D4——hadoop的MapReduce

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解MapReduce的作用和特点&#xff1b; ⚪ 掌握MapReduce的组件&#xff1b; ⚪ 掌握MapReduce的Shuffle&#xff1b; ⚪ 掌握MapReduce的小文件问题&#xff1b; ⚪…

Vue项目引入图片的两种场景和三种方式

场景一&#xff1a;public目录下的图片 public目录 public目录下的图片引入方式&#xff1a; Bash <!--/images/图片名称&#xff0c;这种属于绝对路径&#xff0c;/指向public目录 --> <img src"/images/image.png"> 场景二&#xff1a;在src目录…

【Spring】更简单的读取和存储对象,五大类注解

经过前面的学习&#xff0c;我们已经可以实现基本的 Spring 读取和存储对象的操作了&#xff0c;但在操作的过程中我们发现读取和存储对象并没有想象中的那么 “简单”&#xff0c;所以接下来我们要学习更加简单的操作 Bean 对象的方法 在 Spring 中想要更简单的存储和读取对象…

25.8 matlab里面的10中优化方法介绍—— 拉各朗日乘子法求最优化解(matlab程序)

1.简述 拉格朗日乘子法&#xff1a; 拉格朗日乘子法&#xff08;Lagrange multipliers&#xff09;是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子&#xff0c;可将有 变量与 约束条件的最优化问题转化为具有变量的无约束优化问题求解 举个例子&#xff…

YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)

YOLOv5&#xff1a;使用7.0版本训练自己的实例分割模型&#xff08;车辆、行人、路标、车道线等实例分割&#xff09; 前言前提条件相关介绍使用YOLOv5-7.0版本训练自己的实例分割模型YOLOv5项目官方源地址下载yolov5-7.0版源码解压目录结构 准备实例分割数据集在./data目录下&…

使用python库uvicorn替代Nginx发布Vue3项目

目录 一、Vue3项目打包 二、将打包文件放到python项目 三、配置uvicorn服务 四、启动服务 【SpringBoot版传送门&#xff1a;使用SpringBoot替代Nginx发布Vue3项目_苍穹之跃的博客-CSDN博客】 一、Vue3项目打包 &#xff08;博主vue版本&#xff1a;3.2.44&#xff09; 由…

论文精读之BERT

目录 1.摘要&#xff08;Abstract&#xff09; 2.引言&#xff08;Introduction&#xff09;&#xff1a; 3.结论&#xff08;Conlusion&#xff09;&#xff1a; 4.BERT模型算法: 5.总结 1.摘要&#xff08;Abstract&#xff09; 与别的文章的区别是什么:BERT是用来设计去…

Acwing.285 没有上司的舞会(动态规划)

题目 Ural大学有N名职员&#xff0c;编号为1~N。 他们的关系就像—棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。每个职员有一个快乐指数&#xff0c;用整数H给出&#xff0c;其中1≤i≤N。 现在要召开一场周年庆宴会&#xff0c;不过&#xff0c;没有职员愿意和…

js通过下标获取对象值

var a {1: a,2: b,3: c,4: d}var keys Object.keys(a)var values Object.values(a)console.log(keys , values)# 建议使用 console.log(Object.keys(a)[2] : Object.values(a)[2])#无意义 console.log(Object.keys(a)[3] : a[Object.keys(a)[3]])

下级平台级联视频汇聚融合平台EasyCVR,层级显示不正确的原因排查

视频汇聚平台安防监控EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等…

CAN转EtherNet/IP网关can协议是什么意思

你是否曾经遇到过不同的总线协议难以互相通信的问题&#xff1f;远创智控的YC-EIP-CAN网关为你解决了这个烦恼&#xff01; 远创智控YC-EIP-CAN通讯网关是一款自主研发的设备&#xff0c;它能够将各种CAN总线和ETHERNET/IP网络连接起来&#xff0c;解决不同总线协议之间的通信…

C语言队列实现参考示例

C语言队列实现参考示例 目录 C语言队列实现参考示例前言1 代码实现1.1 实现方案1.2 代码编写 结束语 前言 队列是一种特殊的线性表&#xff0c;特殊之处在于它只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;…

Java 多线程练习

目录 1.定时器操作&#xff08;实现电脑定时关机&#xff09;。 2. 每个月的月末(02:00:00) 执行一次代码 3. 模拟售票 4. 用15个线程实现&#xff0c;求123456789 之间放-和为100的表达式&#xff08;11个结果&#xff09;&#xff0c;如果一个线程求出结果&#xff0c; 立…