JVM面试题+个人理解(参考深入理解JVM一书)1-10

【2021最新版】JVM面试题总结(87道题含答案解析) 文章目录1、Java中会存在内存泄漏吗,请简单描述。2、64位JVM中,int的长度是多数?3、Serial与Parallel GC之间的不同之处?4、32位和64位的JVM,int类型变量的长度是多数?5、Java中WeakReference与SoftReference的区别?6、JVM选项-XX:+UseCompressedOops有什么作用?为什么要使用?7、怎样通过Java程序来判断JVM是32位还是64位?8、32位JVM和64位JVM的最大堆内存分别是多数?9、JRE、JDK、JVM及JIT之间 阅读详情

1.介绍下Java内存区域(运行时数据区)

    java内存区域分为:虚拟机栈(执行java代码时所使用的栈,存放基本类型变量,对象引用,方法的形参,运行时上下文环境,操作指令区,线程私有)

,本地方法栈(用于执行native方法时所使用的栈,在HotStop中与虚拟机栈合并为一个栈),

堆(用于存放几乎new出来的所有的对象实例,是线程共享的),

方法区(包含类信息,静态变量,常量,运行时常量池等,线程共享)

程序计数器(是程序当前执行的字节码行号指示器,线程私有,通过改变程序计数器的值)

2.HotSpot为什么要分为新生代和老年代?

        为了更好的分配内存和回收内存,在java程序的运行过程中,对象的产生于销毁是非常普遍的事情,新生代主要是存放一些使用周期较短暂的对象,比如局部变量所引用的对象,在执行完方法后该引用会直接被释放,此时的对象实例还在堆中,但已经是一个可被回收的"垃圾"了,因为没有任何引用指向该对象,而老年代负责存放周期较长即创建到销毁的过程中将被多次使用的对象.

3.对象头中存放哪些东西?

         Hotspot虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的自身运行时数据(哈希码、GC分代年龄、锁状态标志等等),另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是那个类的实例。

4.对象的访问定位方式有几种?

     ①使用句柄和②直接指针

5.如何判断对象是否死亡(两种方法)

    ①引用计数法

        新创建对象时,创建一个引用计数器,当前对象的印象增加时,计数器+1,同理-1,当计数器的值为0时,说明已经没有引用指向该对象,说明该对象已死

    ②可达性分析法

        通过GC Root为根,寻找与GC Root有引用链的对象即为可达,说明对象依然存活,否则说明该对象已死亡(HotSpot使用这种方法,但也不是一定死亡,至少会经过两次标记才会确定真正死亡,可达性分析中无法与GC Root存在引用链的对象进行第一次标记,查看其是否有必要执行finalize()方法,若对象没有重写或者已经被执行过finalize()方法,则没有必要,直接回收,避免回收的方式是对象的类重写finalize()方法,并在方法中将this重新连接到某引用上,这样就会退出等待回收队列,注:一个对象的finalize()方法只能被执行一次)

6.简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。

    强引用:比如 Student stu = new Student();这就是强引用

    软引用:若存在软引用即在进行垃圾回收后,若内存足够使用,则保留该对象,若还是不够使用,则可以将软引用的对象进行回收

    弱引用:若一个对象只存在弱引用时,该对象可存活至下一次垃圾回收之前,在下一次垃圾回收时被回收

    虚引用:没有实质性的作用,也不会对垃圾回收产生影响,主要是用于在垃圾时候时做日志使用

    区别:虚引用必须与引用队列联合使用

7.垃圾收集有哪些算法,各自的特点?

    垃圾回收算法包括三种:

        ①标记-清除算法

            对堆中可回收的对象进行标记并清除,有两大不足,一是效率低下,标记与清除的效率都比较低,二是会造成大量的碎片,导致内存容量大但是不存在较大的连续内存区域,一般不使用

        ②标记-整理算法

            对堆中可回收的对象进行标记,并处理之后,将依然存活的对象进行整理,即紧凑,将所有不可使用的区域/可使用的区域放置在连续的一段内存中,供程序使用,一般用于老年代

        ③复制算法

            一般用于新生代,将新生代整体划分为Eden区与两个Survivor,每次使用Eden区和一个Survivor区来存储对象,因为新生代对象存在周期短,所以会产生大量需要回收的对象,复制算法就是将存活的对象复制放置在另一个Survivor区中,并将Eden区与一个Survivor区进行清理,特点是效率极高,缺点是浪费部分内存不能使用(但在HotStop中已经做出改良,Eden区与Survivor区的比例默认是8:1)即新生代有10%的区域不能作为对象存储所用

8.常见的垃圾回收器有那些?

    单线程(Serial)收集器(新生代,复制算法),

    多线程(ParNew)收集器(新生代,复制算法),

    Parallel Scavenge收集器(注重吞吐量,新生代,复制算法) 

   对应的老年代回收器:

    Serial Old(老年代,单线程标记-整理算法)

    CMS(老年代,可实现真正并行的收集器,采用标记-清除算法,注重用户体验),

    G1(可由用户控制回收时间与吞吐量,注重用户体验)

9.介绍一下CMS,G1收集器。

    CMS(Concurrent  Mark Sweep)并发标记清除收集器,从名字上可以看出采用的回收算法是标记清除 ,也导致它的一大缺点是造成大量内存碎片.CMS的目的是获取最短回收停顿时间,非常注重用户体验

    收集过程:

        ①初始标记

            对GC Root直接存在引用链的对象进行标记(速度很快,所以采用了Stop The World的单线程处理)

        ②并发标记

            开启用户线程与标记线程并发 去标记与GC Root存在引用链的可达对象,这个过程中用户线程可以继续运行,该线程会标记自开启该线程之前的可达对象,但对于标记期间,用户线程变动的对象无法进行标记

        ③重新标记

            对并发标记过程中用户变动的对象进行标记,采用单线程,因为也很快   

     ④并发清除
            开启用户线程,对标记的区域进行清扫,释放回收掉未标记对象的内存

总结三个缺点:

        ①对系统资源过于敏感(当前CPU+3/4作为垃圾回收线程,在CPU较小的情况下垃圾回收线程所占比过大,影响用户体验)

        ②无法清除浮动垃圾(即在并发清除的过程中用户线程又产生的垃圾对象)

        ③产生大量碎片

G1(Garbage-First)收集器,根据用户所设置的回收时间,从而回收价值最大部分的内存

        也采用分区处理,使用算法从全局角度来看是标记-整理算法,局部来看是复制算法

10.Minor Gc和Full GC 有什么不同呢?

    Minor GC即新生代垃圾回收,采用复制回收算法,效率高,适用于新生代这种死亡率较高的区域,并且有老年代作为担保,一旦新生代存活的对象需要内存大于一个Survivor区时,会将多出来的对象转移至老年代

    Full GC即老年代垃圾回收,采用标记-整理回收算法,老年代的对象一般死亡率较低,而且没有担保,所以无法采用复制回收算法.

Java工程师必备:JVM原理、内存模型、调优、垃圾回收机制、面试题 在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱。 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合集,助力小伙伴们顺利进大厂~ 小编根据C4认证的成长路径整理了Java的相关资源,从零基础带你进入Java的世界。 欢迎大家扫描文末二维码,一起学习~ 一、JVM原理 【JVM原理最全、清晰、通俗讲解,五天40小时吐血整理】 【JVM工作原理】 【初探JVM原理与结构】 【JVM原理和. 阅读详情

相关推荐

高频面试题之JVM灵魂拷问,21题带你通关!

这是本期的 JVM面试题目录,不会的快快查漏补缺~ 1. 什么是JVM内存结构? jvm将虚拟机分为5大区域,程序计数器、虚拟机栈、本地方法栈、java堆、方法区; 程序计数器:线程私有的,是一块很小的内存空间,作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址; 虚拟机栈:线程私有的,每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作数、动态链接和方法返回等信息,当线程请求的栈深度超过了虚拟机允许的最大深度时,就会抛出StackOverFlowError; 本地方

西八老码 2592

JVM经典书籍,已成功拿下字节、腾讯、脉脉offer

《实战Java虚拟机:JVM故障诊断与性能优化》 《HotSpot实战》 《自己动手写Java虚拟机》 《深入理解JVM & G1 GC》 《垃圾回收的算法与实现》 《Java虚拟机精讲》 ##JVM系列 学习JVM的相关资料 《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》 基于最新JDK1.7,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行全面而深入的分析,深刻揭示JVM的工作原理。以实践为导向,通过大量与实际生产环境相结合的案例展示了解决各种常见JVM问题

m0_64319298的博客 504

JVM书籍,里面包括5本大牛的书籍

压缩包内有5本书,有两本是翻译过的,3本是外国大牛所著,希望大家学习的时候能够先读一遍周志明大牛的《深入java虚拟机》然后再读外国大牛的一线文章,当然有能力的大佬能够在阅读的同时翻译一下也是极好的,大家一起努力,学习外国友人的先进技术造福我国。

JVM经典书籍

##JVM系列 学习JVM的相关资料 《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》 基于最新JDK1.7,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行全面而深入的分析,深刻揭示JVM的工作原理。以实践为导向,通过大量与实际生产环境相结合的案例展示了解决各种常见JVM问题的技巧和实践 《揭秘Java虚拟机:JVM设计原理与实现》 《揭秘Java虚拟机:JVM设计原理与实现》从源码角度解读HotSpot的内部实现机制,主要包含三大部分——JV.

songzi1228的博客 998

深入理解jvm

该资源为深入理解java虚拟机相关书籍,为高清pdf文档,希望对您有用!

风中叶 Java常见笔试、面试题目深度剖析Java 笔试 面试 题目

风中叶 Java常见笔试、面试题目深度剖析Java 笔试 面试 题目。 Java常见笔试、面试题目深度剖析(风中叶).rar Java 笔试 面试 题目

深入理解JVM虚拟机

JVM架构图: 类装载器: 沙箱安全机制: Execution Engine执行引擎负责解释命令,提交操作系统执行。 Native Method Stack本地方法栈:运行本地方法的栈 Program Counter Register即PC寄存器(程序计数器) 程序计数器底层是bytecode pointer(bcp)即字节码指针 PC寄存器是用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。 1.它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域...

识时务者的个人博客 14万+

【HCIE】FRR+BFD+OSPF与BGP联动

FRR+BFD+OSPF与BGP联动

Wenrs的博客 1997

2020精选阿里JVM面试题(含答案),附深入理解jvm

中高级Java工程师面试必备题,学会JVM调优对于Java工程师来说非常的重要,不管是实际项目中遇到问题,还是面试中,都需要这一块的知识,小编由简入深的,给大家分享一波。 文末有2020精选阿里JVM面试题文档获取方式,小编额外赠送给大家的一本238页深入理解jvm的PDF文档哦! 1.JDK、JRE、JVM关系? 2.启动程序如何查看加载了哪些类,以及加载顺序? 3. class字节码文件10个主要组成部分? 4.画一下jvm内存结构图? 5.程序计数器 6.Java虚拟机栈 .

文章中资料均可获取,有需要请添加yunduoa2019即可 1485

webapi .net core8.0配置使用Token权限认证

本人在网上找了很多版本,不是太复杂就是不行。

m0_74824592的博客 1760

告别手动改图!用Python+PyWin32驱动SolidWorks,实现参数自动化修改(保姆级避坑指南)

本文详细介绍了如何利用Python和PyWin32驱动SolidWorks实现参数自动化修改,提供从环境配置到API连接的工业级解决方案。通过实战案例和避坑指南,帮助工程师高效搭建自动化脚本工作流,显著提升设计效率。

weixin_30614109的博客 746

深入理解JVM

详细讲解了JVM的工作流程,JVM内存区域划分,JVM类加载的过程,双亲委派模型,JVM中的垃圾回收机制。

. 1万+

深入MIPI DSI显示技术栈 (三) DSI vs CSI-2:孪生协议的本质差异

MIPI协议中的DSI与CSI-2存在本质差异:DSI为输出导向协议(Host→Display),用于屏幕控制和画面传输;CSI-2为输入导向协议(Sensor→Host),专攻图像采集。二者在包结构、同步机制、物理层优化等方面均有显著区别:DSI支持命令包和BLLP包,CSI-2具备嵌入式数据包;DSI时钟模式以Burst为主,CSI-2支持Continuous模式。典型场景中,二者协同工作(如手机相机预览),需注意时序同步和延迟控制。设计混合系统时,需合理规划虚拟通道和物理层资源,充分发挥这对&quot

GateWorld的博客 2106

24个Jvm面试题总结及答案

1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。 2...

不喝枸杞的程序员 8915

论文阅读:Query-Dependent Video Representation for Moment Retrieval and Highlight Detection

近年来,随着视频理解需求的急剧增加,视频时刻检索和高亮检测(MR/HD)成为人们关注的焦点。MR/HD的主要目标是对给定的文本进行视频时刻定位和内容一致性估计,即显著性得分。尽管最近基于transformer的模型带来了一些进步,但我们发现这些方法并不能完全利用给定查询的信息。例如,在预测时刻及其显著性时,有时会忽略文本查询与视频内容之间的相关性。为了解决这个问题,我们引入了基于查询的DETR (QD-DETR),这是一种为MR/HD量身定制的检测transfomer。

qq_42681787的博客 919

基于LLM【M3】驱动的自动化攻击智能体AK(受控使用)

摘要:文章实测了基于大模型的目标驱动型云攻击智能体,展示攻击者仅需输入业务目标(如"窃取BigQuery数据")即可自动完成SSRF、令牌解析、数据导出等全链条攻击。研究发现:(1)攻击编排范式已从固定脚本升级为自适应路径;(2)传统基于IOC的防御与新型攻击存在结构性错位;(3)防御需转向元数据加固、跨服务行为序列检测和AI驱动的紫队演练。实验在授权靶场使用合成数据,验证了攻击智能体"监督者模型+专业执行组"的协作模式,强调防御体系需从单点检测升级为攻击链理解能力。

云上笛暮 307

Java面试题--JVM大厂篇之JVM 大厂面试题及答案解析(1)

本文涵盖了来自阿里巴巴、腾讯、百度、字节跳动等众多大厂的 JVM 面试题及详细解析。内容包括 JVM 内存模型、垃圾回收、引用类型、垃圾回收算法、GC Roots、类加载机制、JVM 调优、线程信息、对象晋升、内存泄漏、堆内存划分、逃逸分析、异常处理等多个重要方面。通过丰富的案例和清晰的解析,帮助读者深入理解 JVM 的关键概念和技术,为应对大厂面试和实际开发中的 JVM 相关问题提供有力支持。

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 优快云 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 1963

RK3288芯片MIPI-DSI显示疑难杂症大揭秘:从点不亮到花屏全攻克

本文针对RK3288芯片MIPI-DSI接口常见的显示异常问题进行系统性分析,提出了完整的排查解决方案。硬件方面,重点检查排线连接、电源供应和散热问题;软件方面,强调屏参配置、驱动版本及时序参数的精确调整。通过两个典型案例(点不亮与花屏)具体说明排查流程,并指出未来优化方向应包括提升芯片抗干扰能力、开发智能自适应驱动程序等。该手册为开发者提供了从基础原理到实际问题的全面指导,能有效缩短故障排查时间,确保显示系统稳定运行。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 661

深入理解JVM虚拟机:从原理到实践

Java虚拟机(JVM)是运行Java字节码的虚拟计算机,它是Java语言跨平台特性的核心。JVM就像一个抽象的计算机,有自己的指令集和运行时内存区域,能够执行字节码文件(.class文件)。实现Java的跨平台特性(“一次编写,到处运行”)管理Java程序的内存执行垃圾回收提供字节码到机器码的转换确保程序的安全运行自定义类加载器通常需要继承类,并重写方法。示例:自定义类加载器// 类文件的存放路径@Overridetry {// 将类名转换为文件路径。

qq_44266569的博客 780

【实战项目开发技术分享】如何设置机器人禁行区/虚拟墙

在现代机器人技术的日益发展中,路径规划是使机器人在复杂环境中安全、高效移动的关键部分。其中一个重要的问题是如何划定机器人的禁行区,以确保机器人不会进入危险区域或无法到达的地方。在本文中,我们将探讨一些关键策略,帮助机器人算法工程师更好地划定禁行区。代价地图可以通过多层叠加来实现,一般包括以下几个层级:静态地图层(Static Map Layer):由SLAM(Simultaneous Localization and Mapping)构建的静态地图。该层包含了环境中固定不变的地物信息,如墙壁、家具等。

xiewf的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

一、全面理解 JVM 虚拟机

​ 首先:面试需要。面试题层出不穷,难道每次面试都靠背几百上千条面试八股?​ 其次:基础决定上层建筑。自己写的代码都不知道是怎么回事,怎么可能写出靠谱的系统?​ 然后:学习JVM也是进行JVM调优的基础。写的代码放到线上要如何运行?要配多少内存?4G够不够?线上环境出问题,服务崩溃了,怎么快速定位?怎么解决问题?​ 总之,学不学JVM,是能自主解决问题的一流程序员与跟着别人做CRUD的二流程序员的分水岭!二流程序员会觉得学JVM无关紧要,反正开发也用不上。做开发我只要学各种框架就行了。而一流程序员都在尽自己

Evan's Blog ٩(๑❛ᴗ❛๑)۶ 1495

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java面试题--JVM大厂篇(1-10)

在JVM的内存模型中,堆内存被分为新生代和老年代。以上题目只是冰山一角,JVM领域非常广泛,包括内存模型、类文件结构、类生命周期、虚拟机性能监控与故障处理工具等等,每一个方向都可以深入研究,而深厚的理解和实践经验往往是通过不断学习和工作中的实际应用积累起来的。双亲委派模型是类加载器的一种组织结构,在这种模型中,除了顶层的启动类加载器外,其余的类加载器都应有自己的父类加载器。它是各个线程共享的数据区域,目的是为了存放类相关的信息,保证类的数据只有一份,节省内存空间,同时也满足类数据的安全访问。

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 优快云 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 2402

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2020面试阿里字节跳动90%被问到的JVM面试题附答案

这篇文章主要介绍了2020面试阿里字节跳动90%被问到的JVM面试题附答案,小编在网上看到觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧! 前言: 最近老是收到小伙伴的私信问我能不能帮忙整理出一份JVM相关的面试题出来,说自己在大厂去面试的时候这一块问的是特别多的,每次自己学的时候每次都学不到重点去。这不他来了,一份详细的JVM面试真题给大家整理在下方了! 一、什么情况下会发生栈内存溢出? 1、栈是线程私有的,栈的生命周期和线程一样,每个方法在执行的时候就会创建一个栈帧,它包含局部

banzhuanhu的博客 1万+
上一篇: Java反射机制笔记
下一篇: 记2019阿里春招Java实习岗网申开放题
Tony__Java
博客等级 码龄9年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值