JVM面试

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 1.JVM 的整体结构
  • 2.类加载做了哪些事情?
    • 类加载器有哪些?
    • 双亲委派和沙箱安全
  • 3.Java虚拟机栈是什么
  • 4.方法区的理解
    • HotSpot 中方法区的演进
    • 方法区的内部结构
  • 5.对象堆中的分配过程
    • 堆空间的参数设置
  • 6.对象创建方式
  • 7.创建对象的步骤
    • 一、判断对象对应的类是否加载、链接、初始化
    • 二、为对象分配内存
      • 1. 如果内存规整:使用指针碰撞
        • 如果内存是规整的,那么虚拟机将采用的是指针碰撞法(Bump The Point)来为对象分配内存。
      • 2. 如果内存不规整:空闲列表分配
        • 如果内存不是规整的,已使用的内存和未使用的内存相互交错,那么虚拟机将采用的是空闲列表来为对象分配内存。
    • 三、处理并发问题
    • 四、属性的默认初始化
        • 属性的默认初始化(零值初始化)
    • 五、设置对象的对象头
    • 六、属性的显示初始化、代码块中初始化、构造器中初始化
  • 8.可达性分析算法,引用计数算法
    • 引用计数算法
    • 可达性分析算法
    • 对象的finalize() 机制
  • 9.垃圾回收相关算法
    • 1. 清除阶段—标记-清除算法
    • 2. 清除阶段—复制算法
    • 3. 清除阶段—标记-压缩(整理)算法
    • 小结
    • 分区算法
  • 10.JVM常用命令行参数
  • 11.常见的垃圾回收器
  • 12.jvm调优案例
    • 一般步骤
        • 解决内存OOM 两大法宝
    • 生产案例
  • 13.内存泄漏
    • 内存泄漏----案例分析
  • 14.纤程


1.JVM 的整体结构

JVM–01–Java体系结构
在这里插入图片描述
在这里插入图片描述
执行引擎包含三部分:

  • 解释器
  • 及时编译器
  • 垃圾回收器
    在这里插入图片描述

2.类加载做了哪些事情?

JVM–02–类加载子系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类加载器有哪些?

image.png
在这里插入图片描述

双亲委派和沙箱安全

在这里插入图片描述
在这里插入图片描述

3.Java虚拟机栈是什么

JVM–05–虚拟机栈
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.方法区的理解

JVM–09–方法区
在这里插入图片描述

在这里插入图片描述

HotSpot 中方法区的演进

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

方法区的内部结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.对象堆中的分配过程

JVM–07–堆1—简介、对象分配过程、GC
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

堆空间的参数设置

在这里插入图片描述

6.对象创建方式

JVM–10–创建对象的步骤、对象实例化内存布局、访问定位
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7.创建对象的步骤

JVM–10–创建对象的步骤、对象实例化内存布局、访问定位

  1. 加载类元信息
  2. 为对象分配内存
  3. 处理并发问题
  4. 属性的默认初始化(零值初始化)
  5. 设置对象头信息
  6. 属性的显示初始化、代码块中初始化、构造器中初始化
    在这里插入图片描述

一、判断对象对应的类是否加载、链接、初始化

  1. 虚拟机遇到一条 new 指令,首先去检查这个指令的参数能否在 Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化(即判断类元信息是否存在)。
  2. 如果没有,那么在双亲委派模式下,使用当前类加载器以 ClassLoader + 包名 + 类名为 Key 进行查找对应的 .class 文件,如果没有找到文件,则抛出 ClassNotFoundException 异常,
  3. 如果找到,则进行类加载,并生成对应的 Class 对象

二、为对象分配内存

首先计算对象占用空间的大小,接着在堆中划分一块内存给新对象。如果实例成员变量是引用变量,仅分配引用变量空间即可,即4个字节大小( long 和 double 是8个字节)

1. 如果内存规整:使用指针碰撞

如果内存是规整的,那么虚拟机将采用的是指针碰撞法(Bump The Point)来为对象分配内存。
  • 意思是所有用过的内存在一边,空闲的内存放另外一边,中间放着一个指针作为分界点的指示器,分配内存就仅仅是把指针指向空闲那边挪动一段与对象大小相等的距离罢了。如果垃圾收集器选择的是
    Serial ,ParNew 这种基于压缩算法的,虚拟机采用这种分配方式。一般使用带 Compact(整理)过程的收集器时,使用指针碰撞。

2. 如果内存不规整:空闲列表分配

如果内存不是规整的,已使用的内存和未使用的内存相互交错,那么虚拟机将采用的是空闲列表来为对象分配内存。
  • 意思是虚拟机维护了一个列表,记录上那些内存块是可用的,再分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的内容。这种分配方式成为了 “空闲列表(Free List)”

说明:选择哪种分配方式由 Java 堆是否规整所决定,而 Java 堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。

三、处理并发问题

在分配内存空间时,另外一个问题是及时保证 new 对象时候的线程安全性:创建对象是非常频繁的操作,虚拟机需要解决并发问题。虚拟机采用了两种方式解决并发问题:

  • CAS(Compare And Swap)失败重试、区域加锁:保证指针更新操作的原子性
  • TLAB 把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在 Java 堆中预先分配一个小块内存,称为本地线程分配缓冲区,(TLAB,Thread Local Allocation Buffer)虚拟机是否使用 TLAB,可以通过 -XX:+/-UseTLAB 参数来设定

四、属性的默认初始化

属性的默认初始化(零值初始化)

内存分配结束,虚拟机将分配到的内存空间都初始化为零值(不包括对象头),这一步保证了对象的实例字段在 Java 代码中可以不用赋初始值就可以直接使用,程序能访问到这些字段的数据类型所对应的零值

  • 属性的默认初始化
  • 显示初始化
  • 代码块中的初始化
  • 构造器初始化
  • 所有属性设置默认值,保证对象实例字段在不赋值可以直接使用

五、设置对象的对象头

  • 将对象的所属类(即类的元数据信息)、对象的 HashCode 和对象的 GC 信息、锁信息等数据存储在对象的对象头中。这个过程的具体设置方式取决于 JVM 实现。
    -
    在这里插入图片描述

六、属性的显示初始化、代码块中初始化、构造器中初始化

  • 在 Java 程序的视角看来,初始化才正式开始。初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量
  • 因此一般来说(由字节码中跟随 invokespecial 指令所决定),new 指令之后会接着就是执行方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完成创建出来。

执行 init 方法进行初始化
在这里插入图片描述

8.可达性分析算法,引用计数算法

JVM–15—垃圾回收相关算法 1---- 标记阶段算法、 finalization机制、MAT 与 JProfiler

引用计数算法

在这里插入图片描述
在这里插入图片描述

可达性分析算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对象的finalize() 机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.垃圾回收相关算法

JVM–16—垃圾回收相关算法 2----清除阶段算法

在这里插入图片描述

1. 清除阶段—标记-清除算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 清除阶段—复制算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 清除阶段—标记-压缩(整理)算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分区算法

在这里插入图片描述
在这里插入图片描述

JVM–19—垃圾回收器----CMS回收器、G1回收器、ZGC回收器

G1 回收器:区域化分代式在这里插入图片描述

10.JVM常用命令行参数

JVM调优–01—JVM常用命令行参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.常见的垃圾回收器

JVM–18—垃圾回收器

JVM–19—垃圾回收器

7种经典的垃圾收集器

  • 串行回收器:Serial、Serial Old
  • 并行回收器:ParNew、Parallel Scavenge、Parallel Old
  • 并发回收器:CMS、G11
    在这里插入图片描述
    Serial 回收器:串行回收
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

12.jvm调优案例

JVM调优–03—性能优化步骤、常用的jvm图形化界面

一般步骤

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决内存OOM 两大法宝

在这里插入图片描述

生产案例

在这里插入图片描述
在这里插入图片描述

13.内存泄漏

JVM调优–05—内存泄漏、案例分析

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

内存泄漏----案例分析

  1. ThreadLocal
    提升–10—ThreadLocal简介
    在这里插入图片描述

14.纤程

JVM调优–07—GC日志分析、纤程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12月12日作业

设计一个闹钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTime> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass …

【Unity学习笔记】光照简介

本节主要是简单介绍一些常见的光照组件和渲染设置。 文章目录 灯光类型平行光Directional Light点光源Point Light聚光灯Spot Light面积光 Area Light 阴影设置全局光照明光照模式直接光照与间接光照Mixed Lighting 光照探针Light Probe Group光照探针组 反射探针 灯光类型 在…

GeMap:Online Vectorized HD Map Construction using Geometry

参考代码&#xff1a;GeMap 动机与出发点 出了原本针对单点的L1损失&#xff0c;车道线具备的几何结构信息作为监督信息也可以再被挖掘挖掘&#xff0c;像车道线实例中点和点之间的距离与夹角、线与线之间的夹角、不同线上点与点之间的关系都可用来作为监督约束&#xff0c;但…

手持式心电图机|12道便携式心电图机主板方案定制

心电图机被广泛应用于心脏状况的监测&#xff0c;可以从多个角度观察心脏情况&#xff0c;及时反映患者的病情&#xff0c;以便医生和患者了解。触摸屏使得控制和信息录入变得轻松。心电图报告提供多种语言选择&#xff0c;便于上传信息&#xff0c;实现无纸化报告。同时&#…

Jemeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…

各地加速“双碳”落地,数字能源供应商怎么选?

作者 | 曾响铃 文 | 响铃说 随着我国力争2030年前实现“碳达峰”、2060年前实现“碳中和”的“双碳”目标提出&#xff0c;为各地区、各行业的低碳转型和绿色可持续发展制定“倒计时”时间表&#xff0c;一场围绕“数字能源”、“智慧能源”、“新能源”等关键词的创新探索进…

matlab 最小二乘拟合空间直线(方法三)

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示四、相关链接博客长期更新,GPT与爬虫自重,你也未必能爬到最新版本。 一、算法原理 1、算法过程 空间直线的点向式方程为:

数据采集网关:工业数据采集上云

数据采集网关&#xff0c;以其高效、便捷的特点&#xff0c;成为了现代工业物联网数据采集处理的重要工具。它是连接不同数据源和数据接收设备的桥梁&#xff0c;将各种形式和格式的数据快速、安全地汇聚到一起。通过数据采集网关&#xff0c;企业可以轻松实现数据的整合、转换…

掌握 Python sympy 库的高级计算技巧

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Sympy是Python中一个强大的符号计算库&#xff0c;为数学和科学计算提供了丰富的功能。本文将深入介绍Sympy库的各项功能&#xff0c;并提供丰富的示例代码&#xff0c;以帮助大家更好地理解和应用这一工具。 S…

Linux--操作系统

1. 常见的操作系统 Windowsmac OSLinuxiOSAndroid 2. 操作系统的定义 操作系统直接运行在计算机上的系统软件&#xff0c; 它是控制硬件和支持软件运行的计算机程序。 3. 操作系统的作用 向下控制硬件向上支持软件的运行&#xff0c;具有承上启下的作用。 4.总结 操作系统…

Android View闪烁动画AlphaAnimation,Kotlin

Android View闪烁动画AlphaAnimation&#xff0c;Kotlin private fun flickerAnimation(view: View?) {val animation: Animation AlphaAnimation(1f, 0f) //不透明到透明。animation.duration 500 // 1次过程时长。animation.interpolator LinearInterpolator() // 线性速…

ISP IC/FPGA设计-第一部分-MT9V034摄像头分析(0)

MT9V034为CMOS图像传感器&#xff0c;有着极其优秀的图像成像性能&#xff0c;同时支持丰富的功能用于isp的开发&#xff1b;MT9V034 的HDR宽动态、10bit数据深度、RAW格式&#xff08;bayer阵列&#xff09;图像、dvp和lvds接口、60fps正是学习isp开发的理想传感器&#xff1b…