【Java面试】JVM汇总

news2025/5/16 23:59:11

目录

1.JVM为什么能跨平台?

2.JVM由哪些部分构成?每个部分起到什么作用?

  3.什么是双亲委派?双亲委派的两大作用是什么?

举个例子🌰:

为什么要有这种“家族规矩”?

破坏双亲委派的场景(进阶了解)

4.Tomcat为什么要自定义类加载器?

 5.程序计数器的作用是什么?

6.虚拟机栈(Java方法栈、JVM栈)的作用是什么?

7.堆的作用是什么?

8.GC如何判断对象是否可回收?

9.垃圾回收算法有哪些?

10.常见的垃圾收集器有哪些?


1.JVM为什么能跨平台?

Java 代码被编译成与操作系统无关的字节码,而 JVM 会将这些字节码解释为机器码,最终实现“一次编译,到处运行”——开发者无需针对不同平台修改代码或重新编译,只需在不同的操作系统中安装对应的 JVM 即可。

 

2.JVM由哪些部分构成?每个部分起到什么作用?

  1. 类加载:类加载器将 .class 文件加载到方法区。
  2. 内存分配:对象实例在堆中分配,方法调用栈帧在JVM栈(虚拟机栈/Java方法栈)中创建。
  3. 执行代码:解释器或JIT执行字节码,程序计数器跟踪执行位置。
  4. 垃圾回收:GC自动回收堆中无用的对象。
  5. 本地调用:通过JNI调用操作系统功能(如网络、文件操作)。

 

  3.什么是双亲委派?双亲委派的两大作用是什么?

双亲委派就像你家里有一个“家族规矩”:孩子遇到问题,先找爸妈解决,爸妈搞不定再找爷爷奶奶,谁有能力解决谁上,绝不自己瞎折腾。在Java里,这就是类加载器(ClassLoader)加载类的规则

举个例子🌰:

假设你要加载一个类(比如 java.lang.String),流程是这样的:

  1. 你(App类加载器)
    👉 先问你的“爸爸”Ext类加载器:“你能加载这个类吗?”
    👨 Ext类加载器又转头问他的“爸爸”Bootstrap类加载器:“你能加载吗?”
    👴 Bootstrap类加载器(家族最牛大佬)一看:“哦,这是JDK核心类啊,我来!” → 成功加载

  2. 如果是你写的类(比如 com.example.MyClass):
    👉 Bootstrap说:“这我不认识,让儿子Ext试试。”
    👨 Ext类加载器也摇头:“这也不是我的活。”
    👦 最后回到 你(App类加载器) :“好吧,我来加载!” → 成功加载你的类

  3. 如果有人想捣乱(比如自己写一个 java.lang.String):
    👉 Bootstrap一看名字是 java.lang.String,直接加载JDK自带的,根本不会给你机会加载自己的版本 → 防止核心类被篡改

为什么要有这种“家族规矩”?

  1. 避免类的重复加载
    比如你和你爸都买同一本书,纯属浪费。双亲委派确保一个类只加载一次,全家共享。

  2. 防止核心API被篡改
    JDK的核心类(如 java.lang.*)必须由Bootstrap类加载器加载,防止你写个恶意类替换掉它们。

  3. 分工明确

    • Bootstrap:加载JDK核心类(rt.jar等)。
    • Ext:加载扩展库(jre/lib/ext下的jar包)。
    • App:加载你写的代码(classpath下的类)。

破坏双亲委派的场景(进阶了解)

有些特殊情况会打破这个规矩,比如:

  • Tomcat:每个Web应用用自己的类加载器,防止不同应用的类冲突。
  • JDBC:用线程上下文类加载器加载不同厂商的驱动。

总结:双亲委派就是“先问爸妈,不行再自己干”。

 

4.Tomcat为什么要自定义类加载器?

Tomcat自定义类加载器主要是为了实现Web应用隔离(防止不同应用的同名类冲突)、支持热部署(动态替换类文件无需重启),同时通过优先加载应用私有类打破双亲委派(保证应用独立性),但核心类仍委派父加载器加载以确保安全,最终满足多应用共存时的灵活性与稳定性需求。

 

 5.程序计数器的作用是什么?

程序计数器是线程私有的内存区域,用于记录当前线程正在执行的字节码指令地址,确保线程切换后能准确恢复到执行位置。

 

6.虚拟机栈(Java方法栈、JVM栈)的作用是什么?

 虚拟机栈核心作用有三点:

第一,管理方法调用的栈帧,存储方法执行时的局部变量和中间结果;

第二,通过线程独立的栈结构隔离不同线程的执行状态;

第三,控制方法调用深度,避免无限递归导致内存溢出。 

 

7.堆的作用是什么?

堆是JVM中最重要的一块区域,所有的对象和数组被创建后都会存放在堆中,在执行字节码指令时,会把创建的对象存入堆中,对象对应的引用地址存入虚拟机栈中的栈帧中,不过当方法执行完之后,刚刚所创建的对象并不会立马被回收,而是要等JVM后台执行GC后,对象才会被回收。

 

8.GC如何判断对象是否可回收?

通过可达性分析,从GC Roots出发,未被引用的对象标记为可回收。

 

9.垃圾回收算法有哪些?

  • 标记-清除(Mark-Sweep) :标记存活对象,清除未标记对象(简单但碎片化)。
  • 复制算法(Copying) :将存活对象复制到另一块内存(适用于年轻代,无碎片但空间浪费)。
  • 标记-整理(Mark-Compact) :标记存活对象后整理到内存一端(适用于老年代,解决碎片问题)。
  • 分代收集(Generational) :结合上述算法,只是一种理念而不是具体算法,年轻代用复制,老年代用标记-清除或标记-整理。

老年代存放长期存活的对象。 

 

10.常见的垃圾收集器有哪些?

 CMS和G1的区别?

  • CMS:以最短停顿时间为目标,采用标记-清除算法,存在内存碎片问题。
  • G1:将堆划分为2048个Region,分了Eden区、S0区、S1区、老年代。

CMS和G1的核心区别在于设计目标与实现机制。CMS通过并发标记清除实现低延迟,但存在内存碎片和Full GC风险,适合小堆且对延迟敏感的场景;G1将堆划分为Region,通过Mixed GC(预测模型)在可控停顿时间内平衡吞吐量,适合大堆和稳定延迟需求。从JDK9开始,G1已成为默认回收器,而CMS已逐步淘汰。 

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

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

相关文章

【SpringBoot】Spring 一站式解决方案:融合统一返回结果、异常处理与适配器模式

前言 ???本期讲解关于统一功能处理的详细介绍~~~ ??感兴趣的小伙伴看一看小编主页:-CSDN博客 ?? 你的点赞就是小编不断更新的最大动力 ??那么废话不多说直接开整吧~~ 目录 ???1.适配器模式? ??1.1适配器模式定义 ?编辑 ??1.2适配器模式角…

STM32基础篇(三)------滴答定时器

滴答定时器简介 SysTick定时器(STK) 处理器有一个24位系统定时器SysTick,它从重新加载值倒计时到零,在下一个时钟沿重新加载(换行)LOAD寄存器中的值,然后对后续时钟倒计时。当处理器暂停调试时&…

Sublime Text4安装、汉化

-------------2025-02-22可用---------------------- 官方网址下载:https://www.sublimetext.com 打开https://hexed.it 点击打开文件找到软件安装目录下的 ctrlf 查找 8079 0500 0f94 c2右边启用替换替换为:c641 0501 b200 90点击替换按钮 替换完成后 另存为本地…

CameraX学习1-关于预览、拍照、对焦

关于CameraX是否可以打开多种特殊摄像头,例如广角、长焦、景深等等 虽然CameraSelector只简单定义了前置后置,没具体指明摄像头,但是可以跟Camera2 API的CameraCharacteristics结合使用,获取对应的cameraid,再传入Came…

【愚公系列】《Python网络爬虫从入门到精通》033-DataFrame的数据排序

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

RBF神经网络+NSGAII多目标优化算法,工艺参数优化、工程设计优化(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.RBF神经网络NSGAII多目标优化算法(Matlab完整源码和数据) 多目标优化是指在优化问题中同时考虑多个目标的优化过程。在多目标优化中,通常存在多个冲突的目标,即改善一…

执行yum -y install npt 报错解决

Cannot find a valid baseurl for repo: base/7/x86_64 解决办法 一、检查网络连接 确保你的服务器可以访问互联网。你可以使用 ping 命令来测试: ping www.baidu.com 若能访问外网,则网络没问题,否则检查网络 二、修改CentOS-Base.rep…

Android Studio 新版本Gradle通过JitPack发布Maven仓库示例

发布本地仓库示例:https://blog.csdn.net/loutengyuan/article/details/145938967 以下是基于 Android Studio 24.2.2(Gradle 8.10.2 AGP 8.8.0 JDK17) 的通过JitPack发布Maven仓库示例,包含aar和jar的不同配置: 1.…

【官方配图】win10/win11 安装cuda 和 cudnn

文章目录 参考资料1.安装cuda toolkit1. 下载安装包2.安装验证 2. 安装cudnn下载cudnn安装包安装cudnn安装后的配置 参考资料 官方nvidia安装cuda官方nvidia安装cudnn 1.安装cuda toolkit 1. 下载安装包 下载地址 https://developer.nvidia.com/cuda-downloads?target_osW…

水滴tabbar canvas实现思路

废话不多说之间看效果图,只要解决了这个效果水滴tabbar就能做出来了 源码地址 一、核心实现步骤分解 布局结构搭建 使用 作为绘制容器 设置 width=600, height=200 基础尺寸 通过 JS 动态计算实际尺寸(适配高清屏) function initCanvas() {// 获取设备像素比(解决 Re…

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…

2.5 运算符2

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 2.5.3 赋值运算符 赋值运算符将值存储在左操作数指定的对象中。有两种赋值操作: 1、简单赋值,使用。其中第二…

DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP

DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…

【Python】网络爬虫——词云wordcloud详细教程,爬取豆瓣最新评论并生成各式词云

目录 一、功能介绍 二、关键技术 1、安装WordCloud 2、利用WordCloud 1、WordCloud的基础用法 **相关参数介绍** **WordCloud 提供的方法如下** 2、WordCloud的应用举例 3、设置停用词 4、WordCloud使用词频 三、程序设计的步骤 1、抓取网页数据 2、数据清洗 3、…

第39天:安全开发-JavaEE应用SpringBoot框架Actuator监控泄漏Swagger自动化

时间轴: Java知识点: 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方组件使用等. 框架库:MyBatis,SpringMVC,SpringBoot&#xf…

综合练习 —— 递归、搜索与回溯算法

目录 一、1863. 找出所有子集的异或总和再求和 - 力扣(LeetCode) 算法代码: 代码思路 问题分析 核心思想 实现细节 代码解析 初始化 DFS 函数 时间复杂度 空间复杂度 示例运行 输入 运行过程 总结 二、 47. 全排列 II - 力扣&a…

【Java SE】Java中String的内存原理

参考笔记: Java String 类深度解析:内存模型、常量池与核心机制_java stringx、-CSDN博客 解析java中String的内存原理_string s1 new string("ab");内存分析-CSDN博客 目录 1.String初识 2.字符串字面量 3.内存原理图 4. 示例验证 4.…

IDEA提示将方法形参更改为(什么什么类型),要检查对应的实体类中的字段类型是否正确

IDEA提示inviteCodeId应该是字符串,明显不对,后来检查发现是FakeRegistration类中把inviteCodeId定义为String类型了。

【芯片设计】NPU芯片前端设计工程师面试记录·20250227

应聘公司 某NPU/CPU方向芯片设计公司。 小声吐槽两句,前面我问了hr需不需要带简历,hr不用公司给打好了,然后我就没带空手去的。结果hr小姐姐去开会了,手机静音( Ĭ ^ Ĭ )面试官、我、另外的hr小姐姐都联系不上,结果就变成了两个面试官和我一共三个人在会议室里一人拿出…

初阶数据结构(C语言实现)——3顺序表和链表(3)

3.链表 3.1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表的物理结构 1.从上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续…