首页 > 编程语言 >Java面试题中高级进阶(JVM篇)

Java面试题中高级进阶(JVM篇)

时间:2024-11-04 22:20:02浏览次数:1  
标签:面试题 Java 进阶 OopMap 内存 JVM 空闲

前言

本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!什么是Stop The World ? 什么是OopMap?说一下JVM 的主要组成部分及其作用?什么是指针碰撞?什么是空闲列表?什么是TLAB?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘

*** 12万字的java面试题整理 ***

什么是Stop The World ? 什么是OopMap?什么是安全点?

进行垃圾回收的过程中,会涉及对象的移动。为了保证对象引用更新的正确性,必须暂停所有的用户线程,像这样的停顿,虚拟机设计者形象描述为「Stop The World」。也简称为STW。

在HotSpot中,有个数据结构(映射表)称为「OopMap」。一旦类加载动作完成的时候,HotSpot就会把对象内什么偏移量上是什么类型的数据计算出来,记录到OopMap。在即时编译过程中,也会在「特定的位置」生成 OopMap,记录下栈上和寄存器里哪些位置是引用。

这些特定的位置主要在:

  • 1.循环的末尾(非 counted 循环)
  • 2.方法临返回前 / 调用方法的call指令后
  • 3.可能抛异常的位置

这些位置就叫作「安全点(safepoint)。」 用户程序执行时并非在代码指令流的任意位置都能够在停顿下来开始垃圾收集,而是必须是执行到安全点才能够暂停。

说一下JVM 的主要组成部分及其作用?

JVM包含两个子系统和两个组件,分别为

  • Class loader(类装载子系统)

  • Execution engine(执行引擎子系统);

  • Runtime data area(运行时数据区组件)

  • Native Interface(本地接口组件)。

  • 「Class loader(类装载):」 根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区的方法区中。

  • 「Execution engine(执行引擎)」:执行class的指令。

  • 「Native Interface(本地接口):」 与native lib交互,是其它编程语言交互的接口。

  • 「Runtime data area(运行时数据区域)」:即我们常说的JVM的内存

首先通过编译器把 Java源代码转换成字节码,Class loader(类装载)再把字节码加载到内存中,将其放在运行时数据区的方法区内,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。

什么是指针碰撞?

一般情况下,JVM的对象都放在堆内存中(发生逃逸分析除外)。当类加载检查通过后,Java虚拟机开始为新生对象分配内存。如果Java堆中内存是绝对规整的,所有被使用过的的内存都被放到一边,空闲的内存放到另外一边,中间放着一个指针作为分界点的指示器,所分配内存仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的实例,这种分配方式就是 指针碰撞。

什么是空闲列表?

如果Java堆内存中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起,不可以进行指针碰撞啦,虚拟机必须维护一个列表,记录哪些内存是可用的,在分配的时候从列表找到一块大的空间分配给对象实例,并更新列表上的记录,这种分配方式就是空闲列表。

什么是TLAB?

可以把内存分配的动作按照线程划分在不同的空间之中进行,每个线程在Java堆中预先分配一小块内存,这就是TLAB(Thread Local Allocation Buffer,本地线程分配缓存) 。虚拟机通过 -XX:UseTLAB 设定它的。

标签:面试题,Java,进阶,OopMap,内存,JVM,空闲
From: https://www.cnblogs.com/xswz/p/18526854

相关文章

  • 计算机毕业设计java基于springboot的网上书店系统
    文章目录项目介绍技术介绍功能介绍核心代码数据库参考系统效果图项目介绍  本文致力于探讨基于SpringBoot框架的网上书店系统的全面设计与实现。随着网络技术的迅猛发展,网上书店作为一种便捷的购书方式受到了广泛关注。为了满足用户对于购书的需求,本文首先从用......
  • 2024/11/4日 日志 关于JavaScript 变量、数据类型、类型转换和流程控制语句的学习
    经过两天的休憩,状态更佳,后面的笔记和学习进度也会加快JavaScript变量、数据类型、类型转换和流程控制语句点击查看代码----变量--JavaScript中用var关键字(variable的缩写)来声明变量--vartest=20;--test="张三":--·JavaScript是一门弱类型语言变量可......
  • Java经典案例代码(持续更新中...)
        2024/11/4目录一、找素数①方法一②方法二二、打印九九乘法表三、打印三角形四、双色球系统一、找素数①方法一publicclassTest07{publicstaticvoidmain(String[]args){System.out.println(Find(101,200));}publicstat......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现十
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下,快递柜......
  • 拼多多2025秋招多模态大模型搜广推面试题
    本文涵盖了几道经典的面试题,包括二叉搜索树的构建与打印、逻辑回归分类算法及其核心概念,以及L1和L2正则化的原理。帮助大家在面试中更好地应对算法和机器学习基础知识的考察。数据结构面试题:使用Python构建二叉搜索树(BST)题目描述给定一个无序数组,将数组按顺序插入......
  • 初始JavaEE篇 —— 文件操作与IO
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程程(ಥ_ಥ)-CSDN博客所属专栏:JavaEE目录文件介绍 Java标准库中提供操作文件的类文件系统操作File类的介绍File类的使用 文件内容操作二进制文件的读写操作文本文件的读写操作文件介绍 文件......
  • Java毕设项目案例实战II基于Java+Spring Boot+Mysql的果蔬作物疾病防治系统的设计与实
    目录一、前言二、技术介绍三、系统实现四、核心代码五、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着现代农业的快速发展,果蔬作物的健康生长与高效管理......
  • Java毕设项目案例实战II基于Java+Spring Boot+Mysql的公司资产网站设计与实现(开发文档
    目录一、前言二、技术介绍三、系统实现四、核心代码五、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言在当今信息化高速发展的时代,企业资产的高效管理和精确......
  • Java SPI(Service Provider Interface)
    JavaSPI(ServiceProviderInterface)机制笔记Java的SPI(ServiceProviderInterface)机制是一种服务发现和动态加载机制,主要用于在运行时加载接口的具体实现,从而让系统能够根据需求灵活地加载不同的实现类。SPI在日志框架、数据库驱动加载、插件系统等场景中被广泛应用,极......
  • LeetCode:3259. 超级饮料的最大强化能量(DP Java)
    目录3259.超级饮料的最大强化能量题目描述:实现代码与解析:DP原理思路:3259.超级饮料的最大强化能量题目描述:        来自未来的体育科学家给你两个整数数组 energyDrinkA 和 energyDrinkB,数组长度都等于 n。这两个数组分别代表A、B两种不同能量饮料每......