JVM面试题
文章平均质量分 50
似来
一个老程序员
展开
-
大厂面试题-什么是双亲委派机制?
谓双亲委派机制,或者叫父级委托模型,就是指按照类加载器的层级关系,逐层进行委派。避免重复加载,我认为这种层级关系的设计,可以避免重复加载导致程序混乱的问。再加上每个类加载器的都有不同的作用范围,这就意味着自己写的。类加载器和类加载器,这些类加载器分别加载不同作用范围的。果父加载器已经加载过了,那么子加载器就没必要去加载了。父加载器都无法加载,再尝试自己来加载这个。系统自己提供的类加载器以外,还可以通过。那么,类的加载过程需要使用到加载器。的查询和加载委派给父加载器去执行,核心类库的加载,也就是%{原创 2023-10-27 11:59:46 · 86 阅读 · 0 评论 -
大厂面试题-什么是内存溢出,什么是内存泄漏?
比如OutputStream,Reader,BitMap,Document,很容易忘了Clos。所以,该回收的垃圾对象没有被回收,垃圾对象。,可用内存越来越少,若可用内存无法存放新的垃圾对象,最终导致内存泄漏。个容量只有300ml的水杯,我们硬要往里面倒500ml的水,这时候,收,顺序错了还产生空指针,所以,大家在Code过程一定要注意,当然,M不被释放,反复执行多次之后,随着时间的累积,就会有大量的对象用完。象,那么,新创建的对象就放不进去了。就会溢出,倒不进去了,这就相当于是内存的溢出。原创 2023-10-27 11:55:56 · 72 阅读 · 0 评论 -
大厂面试题-说一些CMS垃圾回器的工作原理
1、初始标记(CMS initial mark):这个阶段需要Stop The Word,来标记哪些对象是需要回收的,这个过程只需要标记GC Roots能够直接关联的对象,所以速度很快,对性能影响比较小。2、并发标记(CMS concurrent mark):扫描整个堆中的对象,标记所有不需要回收的对象。4、并发清除(CMS concurrent sweep),CMS会并发执行清除操作,同时应用程序继续运行,最大力度减少对性能的影响。其实不管是什么类型的垃圾回收器,本质上就两个能力,识别垃圾和清理垃圾。原创 2023-10-27 11:54:16 · 72 阅读 · 0 评论 -
大厂面试题-JVM中的三色标记法是什么?
3. 灰色:表示已经被垃圾回收器扫描过,但对象引用的其他对象尚未被扫。2. 黑色:表示已经被垃圾回收器扫描过,且对象及其引用的其他对象。步骤不断推导,直到灰色集合中所有的对象变黑后,本轮标记完成。(JVM)中垃圾回收算法的一种,主要用来标记内存中存活和。JVM中的「CMS、G1垃圾回收器」都用到了三色标记法。,还处于白色标记的对象就是不可达对象,可以直接被回收。再判断灰色集合中的对象是否存在子引用,不存在咋放入。开始时(如图),先将所有对象都标记为白色,然后。,接着把直接引用的对象标记为灰色。原创 2023-10-27 11:52:29 · 765 阅读 · 0 评论 -
大厂面试题-如果发生内存泄漏怎么排查
内存泄漏指的是在程序运行过程中,因为某些原因导致不需要使用的对象,仍然占用JVM的内存空间并且这块内存还无法被回收。露的面试频率还挺高的,一方面它是一个比较重要的基础知识,另一方面,我们写的所有程序。要了解gc的情况,可以使用jstat命令,查看虚拟机中各个内存区域的使用情况和。都是运行在JVM上,在出现故障的时候,需要开发人员具备解决该问题的能力。dump工具,把当前内存dump下来,然后使用MAT工具来分析。误以外,内存泄露会有一些比较明显的现象,比如频繁。GC卡顿、年轻代的内存一直。原创 2023-10-27 11:41:18 · 60 阅读 · 0 评论 -
大厂面试题-JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代
每熬过一次Minor GC,该对象的GC年龄都会进行累加,如果超过默认的GC次数15。果对象是在Eden中出生,并经过第一次Minor GC后仍然存活,那这个时候,该对。,首先会分配在Eden区(如果是大对象,会直接进入老年代),当Eden。纳更多对象的时候,就会触发Full GC,Full GC会清理整个内存。了以后,JVM会触发一次Minor GC,用来回收Eden区的来及。Old区,而Eden区会被完全清空,等待下一次对象的分配。流程是怎样的,对象如何晋升到老年代”,这个对象就会转移到老年代。原创 2023-10-27 11:36:27 · 95 阅读 · 0 评论 -
大厂面试题-如何破坏双亲委派模型
为了解决这个问题,在JVM中引入了线程上下文类加载器,它可以把原本需要启动类加载器加载的类,由应用类加载器进行加载。这个打破的意思,就是类加载器可以加载不属于当前作用范围的类,实际上,JVM本身就存在双亲委派被破坏的情况。经存在了,用户可以通过重写ClassLoader里面的loadClass()方法实现自定义类加载,了系统自己提供的类加载器以外,还可以通过ClassLoader类实现自定义加载器,去。在运行的时候,会产生3个类加载器,这三个类加载器组成了一个层级关系。原创 2023-10-27 11:34:46 · 42 阅读 · 0 评论 -
大厂面试题-Java常见的垃圾收集器有哪些
实际上,垃圾收集器(GCGarbageCollector)是和具体JVM实现紧密相关的,不同厂商(IBMOracle,不同版本的JVM,提供的选择也不同。接下来,我来谈谈最主流的Oracle JDK。SerialGC,它是最古老的垃圾收集器“Serial”体现在其收集工作是单线程的,并且在进行垃圾收集过程中,会进入臭名昭著的“Stop-The-World”状态。当然,其单线程设计也意味着精简的GC实现,无需维护复杂的数据结构,初始化也简单,所以一直是。原创 2023-10-27 11:27:09 · 50 阅读 · 0 评论 -
大厂面试题-JVM为什么使用元空间替换了永久代?
2、永久代的对象是通过FullGC进行垃圾收集,也就是和老年代同时实现垃圾收集。1、在1.7版本里面,永久代内存是有上限的,虽然我们可以通过参数来设置,但是JVM加载的class总数、大小是很难确定的。下元空间是可以无限制的使用本地内存的,但是我们也可以使用JVM参数来限制内存。Hotspot虚拟机中,取消了永久代,由元空间来实现方法区的数据存储。是元空间是存储在本地内存里面,内存上限比较大,可以很好的避免这个问题。为什么要使用元空间来替换永久代,背后必然有它的道理,但是。运行时数据区是这样的(如图)。原创 2023-10-27 11:25:31 · 453 阅读 · 0 评论 -
大厂面试题-什么是Java虚拟机,为什么要使用?
2、了解求职者对于JVM基础的掌握程度,良好的基础有助于快速解决GC问题、内存问题等。单理解,它就相当于一个翻译工具,在window下,翻译成window可执行的指令,初学者,第一步基本上都是学习怎么写代码,并没有关注Java代码所运行的平台。3、考察求职者的潜质,一个对技术有热情的人,有助于更好的陪伴公司成长。,虽然写了几年代码,但是对Java本身的理解不够深刻,程序一旦出现问题,很。这个问题的,它能根据不同的操作系统和硬件差异,生成符合。考察这个问题的出发点,有三个。执行的指令会有较大的差异。原创 2023-10-27 11:21:43 · 59 阅读 · 0 评论 -
大厂面试题-一个空Object对象的占多大空间?
在开启了压缩指针的情况下,Object默认会占用12个字节,但是为了避免伪共享问题,JVM会按照8个字节的倍数进行填充,所以会填充4个字节变成16个字节长度。类元指针指向当前实例对象所属哪个类,开启指针压缩的情况下占4个字节,未开启则占8个字节。闭压缩指针的情况下,Object默认会占用16个字节,16个字节正好是8的整数。其中Markword占8个字节、类元指针占4个字节,对齐填充占4个字节。,Java对象的大小需要按照8个字节或者8个字节的倍数对齐,避免伪。数组长度只有对象数组才会存在,占4个字节。原创 2023-10-27 11:19:24 · 66 阅读 · 0 评论 -
一线大厂面试真题——JVM分代年龄为什么是15次?可以25次吗?
在JVM的heap内存里面,分为 Eden Space、Survivor Space、Old Generation。4个bit位能够存储的最大数值是15,所以从这个角度来说,JVM分代年龄之所以。Young GC,这些没有办法被回收的对象就会在From区和To区来回移动,认情况下GC年龄达到15的时候,JVM就会把这个对象移动到Old。GC年龄,是存储在对象头里面的(如图),一个Java对象在JVM。年龄是否达到了15次,只要满足动态年龄判断的依据,也同样会。代年龄的大小,但是这个大小不能超过15。原创 2023-10-27 11:16:54 · 73 阅读 · 0 评论 -
一线大厂面试真题——JVM如何判断一个对象可以被回收
回收的时候,JVM 会首先找到所有的GC root,这个过程会暂停所有用户线程,需要额外的空间来存储引用计数器,但是它的实现很简单,而且效率也比较高。面的引用对象、本地方法栈引用的对象等,然后以GC ROOT作为起始。用计数器,也就是为每一个对象添加一个引用计数器,用来统计指向当。会出现一些不再使用但是又无法回收的内存,造成内存泄露的问题。一个对象是否可以被回收,最重要的是判断这个对象是否还在被。它的主要思想是,首先确定一系列肯定不能回收的对象作为GC。GC Roots这些根节点向下搜索,可达的对象保留,原创 2023-10-26 14:47:25 · 376 阅读 · 0 评论 -
一线大厂面试真题——CPU飙高系统反应慢怎么排查
这两个过程需要CPU执行内核相关指令实现状态保存,如果较多的上下文切换会占据大量CPU资源,从而使得cp。CPU利用率过高之后,导致应用中的线程无法获得CPU的调度,从而影响程序的执行效率!然是这两个问题导致的CPU利用率较高,于是我们可以通过top命令,找到CPU。没有实操过,但是你知道导致CPU飙高这个现象的原因,并说出你的解决思路,CPU利用率过高的线程id不断变化,说明线程创建过多,需要挑选几个线程。资源过度消耗,也就是在程序中创建了大量的线程,或者有线程一直占用。CPU消耗过高的线程,这里有两。原创 2023-10-26 14:34:20 · 194 阅读 · 0 评论 -
一线大厂面试真题——对双亲委派的理解
1、Bootstrap ClassLoader,主要是负责Java核心类库的加载,也就是%{JDK_HOME}\lib下的rt.jar、resources.jar等。JVM在运行的时候,会产生3个类加载器,这三个类加载器组成了一个层级关系每个类加载器分别去加载不同作用范围的jar包,比如。了系统自己提供的类加载器以外,还可以通过ClassLoader类实现自定义加载器,去。(如图)所谓的父委托模型,就是按照类加载器的层级关系,逐层进行委派。,因为这种层级关系实际上代表的是一种优先级,也就是所有的类的加载,原创 2023-10-26 14:29:34 · 63 阅读 · 0 评论 -
一线大厂面试真题——如何排查过线上oom的问题
OOM是out of memory的简称,表示程序需要的内存空间大于JVM分配的内存空间。OOM后果就是导致程序崩溃;可以通俗理解:程序申请内存过大,虚拟机无法满足。导致OOM错误的情况一般是:1.给JVM虚拟机分配的内存太小,实际业务需求对内存的消耗比较多2.Java应用里面存在内存泄漏的问题,或者应用中有大量占用内存的对象,并且没办法及时释放。给内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存。原创 2023-10-26 14:26:02 · 160 阅读 · 0 评论 -
一线大厂面试真题——什么是JVM
我们先看下目前主流的JVM HotSpot的架构图,通过这张架构图,我们可以看出JVM的大致流程是把一个class文件通过类加载器加载进系统,然后放到不同的区域,通过编译器编译。但当程序运⾏的过程中出现了问题,⽽这个问题发生在JVM层⾯的,那我们就需要熟悉JVM的运⾏机制,才能迅速排查并解决JVM的性能问题。必备知识,这⾥就不再赘述了,我们可以关注⼀下Class⽂件的格。发者⽽⾔,即使不熟悉JVM的运⾏机制并不影响业务代码的开发,码⽂件⽣成的,⾄于源码⽂件的内容,是每个Java开发。原创 2023-10-26 14:13:57 · 413 阅读 · 0 评论