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

本文目录如下:

  • 七、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 的频率。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rocketmq rsqldb 简单记录

GitHub 地址 https://github.com/alibaba/rsqldb/tree/main,是和目前stream sql化看齐的Rocketmq的sql,类似还有kafka的sqlDB 和flink sql。 目前版本0.2 ,主要提供rest模式调用,controller类为public class RsqlController支持的…

F5 LTM 知识点和实验 5-健康检测

第五章:健康检测 监控的分类: 地址监控(3层)服务监控(4层)内容监控(7层)应用监控(7层)性能监控(7层)路径监控(3、4、7层)三层监控: 三层监控可以帮助bipip系统通过检查网络是否可达监视资源。比如使用icmp echo,向监控节点发送icmp_echo报文,如果接收到响应…

Redis(三)—— Redis基本的事务操作、Redis实现乐观锁

一、Redis基本的事务操作 首先声明: redis的单条命令是保证原子性的(回想一下setnx k1 v1 k5 v5命令如果k1已经存在,那么k5也会设置失败)但是redis的事务不保证原子性!见下面“1.2 某条命令有错怎么办?”…

C++之科学技术法e使用(一百七十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考

PP-YOLOE: An evolved version of YOLO Abstract 在本报告中,我们介绍了PP-YOLOE,一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化,采用无锚模式,更强大的骨干和颈部配备CSPRepResSt…

安全学习DAY08_算法加密

算法加密 漏洞分析、漏洞勘测、漏洞探针、挖漏洞时要用到的技术知识 存储密码加密-应用对象传输加密编码-发送回显数据传输格式-统一格式代码特性混淆-开发语言 传输数据 – 加密型&编码型 安全测试时,通常会进行数据的修改增加提交测试 数据在传输的时候进行…

0725 区块链1.0 2.0 3.0 智能合约 比特币 以太坊 DAG 有向无环图

文献阅读:[1]华亚洲. 基于改进Block-DAG区块链的时空数据存储及查询方法研究[D].辽宁大学,2022.DOI:10.27209/d.cnki.glniu.2022.001364.[1]华亚洲,丁琳琳,陈泽等.面向时空数据的区块链构建及查询方法[J].计算机应用,2022,42(11):3429-3437. 文献总结: …

【 Spring AOP学习二】统一功能处理:拦截器异常返回数据格式

目录 一、用户登录权限效验 🍑1、Spring拦截器实现用户统一登录验证(重要) (1)定义一个拦截器 (2)将自定义拦截器加入到系统配置中 🍑2、拦截器实现原理 🍑3、统一…

【计算机视觉中的 GAN 】 - 条件图像合成和 3D 对象生成(2)

一、说明 上文 【计算机视觉中的 GAN 】或多或少是GANs,生成学习和计算机视觉的介绍。我们达到了在 128x128 图像中生成可区分图像特征的程度。但是,如果你真的想了解GAN在计算机视觉方面的进展,你肯定必须深入研究图像到图像的翻译。…

mybatis-config.xml-配置文件详解

文章目录 mybatis-config.xml-配置文件详解说明文档地址:配置文件属性解析properties 属性应用实例 settings 全局参数定义应用实例 typeAliases 别名处理器举例说明 typeHandlers 类型处理器environments 环境environment 属性应用实例 mappers配置 mybatis-config.xml-配置文…

什么是 HTTP 长轮询?

什么是 HTTP 长轮询? Web 应用程序最初是围绕客户端/服务器模型开发的,其中 Web 客户端始终是事务的发起者,向服务器请求数据。因此,没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程

在某鱼上找了一个友善之臂的Tiny6410开发板用来体验一下嵌入式开发。这次先体验一下裸机程序的开发流程,由于这个开发板比较老旧了,官方文档有很多过期的内容,所以记录一下整个过程。 1. 交叉编译器安装 按照光盘A中的文档《04- Tiny6410 L…

fasta序列转为数字0和1-python

原始文件: 目标文件: linux版本 #name:lin_convert_fasta_to_01.py #! /usr/bin/env python #usage: python hash-always.py -l 1.list -f 2.txt > out.txt import argparse parser argparse.ArgumentParser(description"Advanced screeni…

perf 分析MySQL底层函数调用

文章目录 一、安装软件包二、数据采集2.1 perf top2.2 perf record 三、数据加工和解读 一、安装软件包 sudo yum install -y perf git clone https://github.com/brendangregg/FlameGraph二、数据采集 2.1 perf top perf top -g -p pidof mysqld 第一列:符号引…

常见面试题之设计模式--工厂方法模式

1. 概述 需求:设计一个咖啡店点餐系统。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore&…

QT:当登录成功时,关闭登录界面,跳转到新的界面中

1> 继续完善登录框,当登录成功时,关闭登录界面,跳转到新的界面中 widget.h #include "widget.h" //#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent)//, ui(new Ui::Widget) {//ui->setu…

LeetCode使用最小花费爬楼梯(动态规划)

使用最小花费爬楼梯(动态规划) 题目描述算法流程(方法一)编程代码优化代码算法流程(方法二)编程代码代码优化 链接: 使用最小花费爬楼梯 题目描述 算法流程(方法一) 编程代码 class Solution { public:int minCostClimbingStair…

Windows驱动第一节(什么是驱动?)

本文来自微软,由本人兴趣爱好人工翻译(非机翻) What is a driver? - Windows drivers | Microsoft Learn 我想很难给驱动这个词一个准确的定义.最基础的定义是驱动是一个用于让操作系统和硬件设备通信的软件组件. 举一个例子,假设一个应用程序需要从硬件设备读取一些数据,这…

npm yarn nrm

npm 和 yarn npm和yarn都是包管理器,yarn是在2016年发布的,那时npm还处于V3时期,那时候还没有package-lock.json文件,不稳定性、安装速度慢等缺点经常会受到广大开发者吐槽。此时,yarn 诞生了。yarn 的优点&#xff0c…

ReID网络:MGN网络(1) - 概述

Start MGN 1. 序言 现代基于感知的信息中,视觉信息占了80~85%。基于视觉信息的处理和分析被应用到诸如安防、电力、汽车等领域。 以安防市场为例,早在2017年,行业咨询公司IHS Market,我国在公共和私人领域安装有摄像头约1.76亿…