面试官问我JVM内存结构,我真的是

如何应对面试官的JVM调优问题 为什么要进行JVM调优 我猜你肯定是为了面试,现在很多公司都会问这个,虽然你工作了N年JVM调优可能都不会接触到,但我觉得还是有考察的必要的。因为很多时候我们考察一个人不光要考察他的硬实力,还要看他有没有持续学习、深入研究的精神,一只咸鱼是不会看JVM调优的。 JVM调优真的有用吗?能解决什么问题? 用肯定是有用的。但是,默认的大部分情况是足够你用的,出了问题应该先从程序找问题,不要让JVM背锅好吗? 如何应对面试官问的JVM调优的问题 我觉得应该很少有面试官会上来就问JVM调优怎么调,毕竟这显得有点奇怪 阅读详情

面试官:今天来聊聊JVM的内存结构吧?

候选者:嗯,好的

候选者:前几次面试的时候也提到了:class文件会被类加载器装载至JVM中,并且JVM会负责程序「运行时」的「内存管理」

候选者:而JVM的内存结构,往往指的就是JVM定义的「运行时数据区域」

候选者:简单来说就分为了5大块:方法区、堆、程序计数器、虚拟机栈、本地方法栈

候选者:要值得注意的是:这是JVM「规范」的分区概念,到具体的实现落地,不同的厂商实现可能是有所区别的。

面试官:嗯,顺便讲下你这图上每个区域的内容吧。

候选者:好的,那我就先从「程序计数器」开始讲起吧。

候选者:Java是多线程的语言,我们知道假设线程数大于CPU数,就很有可能有「线程切换」现象,切换意味着「中断」和「恢复」,那自然就需要有一块区域来保存「当前线程的执行信息」

候选者:所以,程序计数器就是用于记录各个线程执行的字节码的地址(分支、循环、跳转、异常、线程恢复等都依赖于计数器)

面试官:好的,理解了。

候选者:那接下来我就说下「虚拟机栈」吧

候选者:每个线程在创建的时候都会创建一个「虚拟机栈」,每次方法调用都会创建一个「栈帧」。每个「栈帧」会包含几块内容:局部变量表、操作数栈、动态连接和返回地址

候选者:了解了「虚拟机栈」的组成后,也不难猜出它的作用了:它保存方法了局部变量、部分变量的计算并参与了方法的调用和返回。

面试官:ok,了解了

候选者:下面就说下「本地方法栈」吧

候选者:本地方法栈跟虚拟机栈的功能类似,虚拟机栈用于管理 Java 函数的调用,而本地方法栈则用于管理本地方法的调用。这里的「本地方法」指的是「非Java方法」,一般本地方法是使用C语言实现的。

面试官:嗯…

候选者:嗯,说完了「本地方法栈」、「虚拟机栈」和「程序计数器」,哦,下面还有「方法区」和「堆」

候选者:那我先说「方法区」吧

候选者:前面提到了运行时数据区这个「分区」是JVM的「规范」,具体的落地实现,不同的虚拟机厂商可能是不一样的

候选者:所以「方法区」也只是 JVM 中规范的一部分而已。

候选者:在HotSpot虚拟机,就会常常提到「永久代」这个词。HotSpot虚拟机在「JDK8前」用「永久代」实现了「方法区」,而很多其他厂商的虚拟机其实是没有「永久代」的概念的。

候选者:我们下面的内容就都用HotSpot虚拟机来说明好了。

候选者:在JDK8中,已经用「元空间」来替代了「永久代」作为「方法区」的实现了

面试官:嗯…

候选者:方法区主要是用来存放已被虚拟机加载的「类相关信息」:包括类信息、常量池

候选者:类信息又包括了类的版本、字段、方法、接口和父类等信息。

候选者:常量池又可以分「静态常量池」和「运行时常量池」

候选者:静态常量池主要存储的是「字面量」以及「符号引用」等信息,静态常量池也包括了我们说的「字符串常量池」。

候选者:「运行时常量池」存储的是「类加载」时生成的「直接引用」等信息。

面试官:嗯…

候选者:又值得注意的是:从「逻辑分区」的角度而言「常量池」是属于「方法区」的

候选者:但自从在「JDK7」以后,就已经把「运行时常量池」和「静态常量池」转移到了「堆」内存中进行存储(对于「物理分区」来说「运行时常量池」和「静态常量池』就属于堆)

面试官:嗯,这信息量有点多

面试官:我想问下,你说从「JDK8」已经把「方法区」的实现从「永久代」变成「元空间」,有什么区别?

候选者:最主要的区别就是:「元空间」存储不在虚拟机中,而是使用本地内存,JVM 不会再出现方法区的内存溢出,以往「永久代」经常因为内存不够用导致跑出OOM异常。

候选者:按JDK8版本,总结起来其实就相当于:「类信息」是存储在「元空间」的(也有人把「类信息」这块叫做「类信息常量池」,主要是叫法不同,意思到位就好)

候选者:而「常量池」用JDK7开始,从「物理存储」角度上就在「堆中」,这是没有变化的。

面试官:嗯,我听懂了

面试官:最后来讲讲「堆」这块区域吧

候选者:嗯,「堆」是线程共享的区域,几乎类的实例和数组分配的内存都来自于它

候选者:「堆」被划分为「新生代」和「老年代」,「新生代」又被进一步划分为 Eden 和 Survivor 区,最后 Survivor 由 From Survivor 和 To Survivor 组成

候选者:不多BB,我也画图吧

候选者:将「堆内存」分开了几块区域,主要跟「内存回收」有关(垃圾回收机制)

面试官:那垃圾回收这块等下次吧,这个延伸下去又很多东西了

面试官:你要不先讲讲JVM内存结构和Java内存模型有啥区别吧?

候选者:他们俩没有啥直接关联,其实两次面试过后,应该你就有感觉了

候选者:Java内存模型是跟「并发」相关的,它是为了屏蔽底层细节而提出的规范,希望在上层(Java层面上)在操作内存时在不同的平台上也有相同的效果

候选者:Java内存结构(又称为运行时数据区域),它描述着当我们的class文件加载至虚拟机后,各个分区的「逻辑结构」是如何的,每个分区承担着什么作用。

面试官:了解了

今日总结:JVM内存结构组成(JVM内存结构又称为「运行时数据区域」。主要有五部分组成:虚拟机栈、本地方法栈、程序计数器、方法区和堆。其中方法区和堆是线程共享的。虚拟机栈、本地方法栈以及程序计数器是线程隔离的)

【对线面试官-移动端】系列 一周两篇持续更新中!

【对线面试官-电脑端】系列 一周两篇持续更新中!

原创不易!!求三连!!

Rapid SCADA MQTT 一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau 阅读详情

相关推荐

android广告SDK原理详解(附源码)

广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。   也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这

rmcgogo的博客 1万+

JVM 常见面试题及解析(2024)

解析:JVM(Java Virtual Machine)即 Java 虚拟机,是一种可以执行 Java 字节码的虚拟计算机。它的主要作用是屏蔽不同操作系统和硬件之间的差异,使得 Java 程序能够在各种平台上 “一次编写,到处运行”。通过将 Java 源文件编译成字节码文件(.class),然后由 JVM 在不同的平台上进行解释或编译执行,实现了跨平台性。

爱好技术的小老头 1万+

达梦DCA2023年10月培训及考试总结

本次培训共分三天,培训内容不单单是DCA的单机安装、实例创建、库表操作等,培训内容是把关系型数据库的理论及DM8的产品结合起来讲,很实用。具体的考试则是需要个人大量的线下练习,考试总体而言都是培训讲过的内容,只要用心听,好好练习,哪怕是没有计算机基础的童鞋也能考过。提示:以下是本篇文章正文内容,下面案例可供参考总体而言,本次考试不是很难,用心准备,考前认真听讲,考后多次练习,基本都能通过。

qinjuao的博客 2320

java面试题-JVM内存结构

jvm 5大区域 ,程序计数器、虚拟机栈、本地方法栈、java堆、方法区 相关问题

qq_33129875的博客 1080

大厂嵌入式面试常考八股文及算法

1.指向已被释放或无效的内存地址的指针是野指针。互斥锁是一种用于线程同步的机制,用于确保同一时间只有一个线程访问共享资源。多态是面向对象编程中的一种特性,它允许以一种统一的方式处理不同类型的对象,通过相同的接口可以表现出不同的行为。大小端(Endian)指的是在计算机存储和处理多字节数据时,字节的存储顺序。大端序(Big Endian):高位字节存储在低地址,低位字节存储在高地址。类似于将数字的高位放在左边,低位放在右边的表示方式。例如整数值0x12345678在内存中按照大端序排列为。

谢谢大家的关注 6152

Cadence原理图设计10个高效技巧:从封装绑定到BOM表导出全流程

本文为硬件工程师提供了一套Cadence OrCAD Capture CIS原理图设计的高效实战指南。文章深度解析了从封装库的精准管理与CIS数据库绑定、封装批量处理技巧,到设计缓存清理、跨页信号追踪,再到关键的DRC检查、网表导出以及智能BOM报表生成的全流程核心技巧,旨在帮助工程师提升设计效率与可靠性,规避常见错误。

weixin_29178069的博客 201

最全JVM面试题

文章目录1.说一下 JVM 的主要组成部分及组成部分的作用?2.说一下 JVM 的作用?3.深拷贝和浅拷贝4.说一下堆栈的区别?5.队列和栈是什么?有什么区别? 1.说一下 JVM 的主要组成部分及组成部分的作用? 方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域,运行时数据区域就是我们常说的JVM的内存。 类加载子系统:根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区中。 Java堆

weixin_45081813的博客 1万+

Linux环境下离线升级GCC-9.4.0的完整实践指南

本文详细介绍了在Linux环境下离线升级GCC-9.4.0的完整实践指南,包括准备工作、依赖库安装、编译配置及常见问题解决。特别适用于企业内网或安全要求严格的服务器环境,帮助开发者高效完成GCC离线升级,提升编译性能并支持现代编程语言特性。

weixin_29288313的博客 670

面试官:我就问了一个JVM,没想到他能吹半个小时

前言: 作为 Java 的从业者,在找工作的时候,一定会被问及关于 JVM 相关的知识。 JVM知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。 在这里我们将详细的整理常见的 JVM 面试题目,并给出标准答案,提供给大家学习参考。等大家面试的时候,希望能对面试官吹个半个小时,如果真是这样,我想说:牛皮啊! 另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,想要资料的话请点1065653031暗号优快云。 目录前言:1、内存模型以及分区,需

banzhuanhu的博客 1万+

SAP 采购申请、采购订单的审批策略

采购申请、采购订单的审批策略 采购申请审批 PR审批可以分为:含分类、无分类 1、无分类PR审批: A、后台配置: 设置批准代码(批准代码可以设置多级审批): 发布批准标识使用系统已有的 “2 询价/采购订单”: 新建采购申请审批策略Z1(仅设置1级审批,一共可以设置8级审......

willieyuan的博客 2万+

Aurix TC3xx系列MCU ADC模块简介(一)

简单介绍英飞凌Aurix TC3xx系列单片机ADC模块的特点及内部结构。

m0_38045338的博客 6360

JVM面试题(史上最强、持续更新、推荐)

史上最全 Java 面试题:JVM 篇 社群交流的面试真题 面试真题1:元空间会产生内存溢出么?在什么情况下会产生内存溢出? 具体问题:元空间会产生内存溢出么?在什么情况下会产生内存溢出?。 java8 及以后的版本使用Metaspace来代替永久代,Metaspace是方法区在HotSpot中的实现,它与持久代最大区别在于,Metaspace并不在虚拟机内存中而是使用本地内存也就是在JDK8中,classe metadata(the virtual machines internal pres

m0_68850571的博客 8987

【论文解读--Xdog】新型电驱式四足机器人研制与测试

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、四足机器人体型大小和驱动方式的比较二、四足机器人设计一些重要的结论三、系统控制框架四、系统硬件框架五、力位混合控制(阻抗控制)六、侧向平衡控制(和VMC如出一辙)七、电机驱动系统研制(FOC磁场定向控制)总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对新型电驱式四足机器人研制与测试做个简单的介绍,具体内容后续再更,其他模块可以参

qq_35635374的博客 3724

2024年最全面试官问我JVM内存结构,我真的是,java源码模拟面试解析指南

总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取候选者:好的,那我就先从「程序计数器」开始讲起吧。候选者。

2401_84688317的博客 665

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

二面京东,面试官直接问我JVM,我心里一阵暗爽~

二面京东,面试官直接问我JVM,我心里一阵暗爽~简直了,hhhh明人不说暗话,直接进入主题!!!一、什么是JVM二、JAVA代码编译和执行过程类加载机制类执行机制三、JVM内存管理和垃圾回收垃圾回收按照基本回收策略分JVM分别对新生代和旧生代采用不同的垃圾回收机制新生代的GC:与旧生代的并发GC配合使用旧生代的GC:四、JVM内存调优(1)新生代设置过小(2)新生代设置过大(3)Survivor设置过小(4)Survivor设置过大最后汇总一下JVM常见配置堆设置收集器设置垃圾回收统计信息并行收集器设置并发

wj1314250的博客 6369

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试者,如果知晓这些变化,又将成为面试中的亮点。 如果在网络上搜索JVM内存结构,90%的可能会搜到Java7及以前的内存图,本篇文章将会对JVM内存结构再次细化,深入理解Java8之后的内部变化。现在意识到...

程序新视界 5001

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

被面试官侮辱后,我决定通宵研究JVM!

面试遭到面试官看轻,怎么反驳??

7536

面试官居然问我JVM内存结构

面试官:今天来聊聊JVM的内存结构吧? 候选者:嗯,好的 候选者:前几次面试的时候也提到了:class文件会被类加载器装载至JVM中,并且JVM会负责程序「运行时」的「内存管理」 候选者:而JVM的内存结构,往往指的就是JVM定义的「运行时数据区域」 候选者:简单来说就分为了5大块:方法区、堆、程序计数器、虚拟机栈、本地方法栈 候选者:要值得注意的是:这是JVM「规范」的分区概念,到具体的实现落地,不同的厂商实现可能是有所区别的。 面试官:嗯,顺便讲下你这图上每个区域的内容吧。 ...

m0_67698950的博客 111

面试官问你关于JVM性能调优那些事儿,你要怎样优雅回答?

对于工作3年左右的Java程序员来说,在面试大厂的过程中,面试官可能不会太关注你做了多少个项目、你的CRUD水平如何。更多的是关注你对某项技术点的理解深度,所以说,工作3年左右的小伙伴一定要把自己的重心放到技术的深度上来。 今天,我们先一起聊聊关于JVM性能调优的话题,本文的主要结构如下所示。 常见面试题 关于JVM,一道常见的面试题就是:Java中创建的对象是存储在JVM中的哪个区域的? 例如,这里,我们简单的列举一行代码,如下所示。 User user = new User();

wdj_yyds的博客 3004

当面试被问到jvm(Java虚拟机)时,如何将面试官引入自己的节奏?

作为一名Java开发工程师,不管是校招还是社招jvm一定是必问必会的知识点。虽然说真正开发中用到的不多,甚至可以说用不到(对于刚入行或者Java初级),但是当面试官问出来,就是想考察你对知识的一个广度,如果你能答得很好,那么恭喜你,你已经赢得面试官的好感。在接下来的面试中你会很自信。当然如果你对jvm了解的很深刻,你还可以将面试官引导到自己的节奏。在做自我介绍的时候可以可以强调自己熟悉jvm,那么面试官就有很大概率问到jvm。这篇文章就来详细的介绍一下面试中遇到有关jvm相关面试题该怎么回答。

唯有努力,方可自信! 1万+
上一篇: 我用Java内存模型征服了面试官
下一篇: 阿里面试官:垃圾回收都不懂?来面试?
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值