【Java进阶营】java面试题---JVM之垃圾回收

【Java面试题】JVM(26道) 阅读详情
1. 为什么要进行垃圾回收?

    创建的对象没用时也不进行回收的话,堆内存很快就会被消耗殆尽,所以需要把一些没有用的对象清理掉。

2. JVM GC 分为哪几种?

    分为三种,对新生代进行的垃圾回收叫 minor GC,也叫YGC;对老年代进行的垃圾回收叫 major GC;同时对新生代和老年代进行的垃圾回收叫 full GC,简称 FGC。

3. 如何判断一个对象是否可以被回收?

有两种方法判断对象是否可回收,引用计数法和可达性分析算法。

    引用计数法就是维护一个计数器,有引用指向对象时就加一,引用失效时就减一,引用为零就可以被回收。主流的 JVM 并没有采用这种方式,因为很难解决循环引用问题;
    可达性分析算法是通过一系列 GC Roots 根节点集作为起始节点,从这些节点根据引用关系向下搜索,搜索过程中经过的路径称为引用链。如果一个对象到 GC Roots 之间没有任何引用链,那么这个对象就称为不可达,就可以被回收。主流 JVM 采用的就是这种方式。

4. 哪些对象可以当作 GC Roots?

    系统类对象,也就是 jdk 自带的类的对象;
    native 方法引用的对象;
    活动线程正在引用的对象;
    正用于加锁的锁对象。

5. 不可达的对象会被立即回收吗?

    不会,一个对象至少要两次判断为不可达才会进行回收,如果第一次判断为不可达,第二次又可达,那这个对象就会复活。

6. 确定一个对象是要被回收的,那接下来如何怎么处理?

    会加入到回收队列中,然后 Finalizer 线程会触发该对象的 finalize 方法对其进行回收。Finalizer 线程并不会阻塞等待 finalize 结束,是为了不让回收队列阻塞。

7. 说一说垃圾回收的过程?

简单地说就是复制、清空、互换。详细过程是:

    新生代的伊甸园区对象如果满了,就会触发 YGC,YGC 后还存活的对象,就会进入 from 区,同时清空伊甸园区;
    伊甸园区经过一次 YGC 又满了时,会再次触发 YGC,会对伊甸园区和 from 区都进行垃圾回收;
    经过这里两次 YGC 还存活的对象,就会复制到 to 区,对象年龄加一,然后清空伊甸园区和 from 区,此时 from 区和 to 区身份互换,谁空谁是 to;
    当对象年龄达到阈值,默认是15,就会进入老年代,老年代满了就会触发 full GC,同时对新生代和老年代进行垃圾回收;
    触发 full GC 还没腾出空间就会内存溢出。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

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

常见的有四种,复制算法,标记清除算法,标记整理算法和分代回收算法。

    新生代的 YGC 采用的就是复制算法,垃圾回收之后还存活的对象就会被复制到另一区域。它不会产生内存碎片,但是内存利用率不高;
    标记清除是先对可回收的对象进行标记,然后再进行回收。它不会造成内存空间的浪费,但是会产生内存碎片;
    标记整理就是在标记清除的基础上,对内存碎片进行整理;
    新生代对象存活率低,适合用复制算法;老年代对象比较多,所以不适合用复制算法,适合用标记整理。这种不同内存区域根据其特点采用不同垃圾回收算法的方式叫分代回收。

9. 你知道哪些垃圾回收器?

    serial 收集器:串行收集器,使用复制算法,新生代使用的,单线程,没有线程交互的开销,因此效率高,但是工作时会暂停其他所有线程;
    serial old收集器:serial 收集器的老年代版本,使用标记整理算法;
    parNew 收集器:新生代收集器,使用复制算法,是 serial 收集器的多线程版本,性能更好;
    parNew old 收集器:parNew 收集器的老年代版本,使用标记整理算法;
    parallel scavenge 收集器:使用复制算法,jdk8 新生代使用的默认收集器,更关注吞吐量,能更高效地利用 CPU;
    CMS 收集器:老年代并发收集器,使用标记清除算法,可以和用户线程并发执行。优点是并发运行,低停顿,缺点是会产生内存碎片;
    G1 收集器:使用标记整理算法的堆收集器,也就是新生代和老年代都可以使用这种收集器。
Java工程师必备:JVM原理、内存模型、调优、垃圾回收机制、面试题 在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱。 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合集,助力小伙伴们顺利进大厂~ 小编根据C4认证的成长路径整理了Java的相关资源,从零基础带你进入Java的世界。 欢迎大家扫描文末二维码,一起学习~ 一、JVM原理 【JVM原理最全、清晰、通俗讲解,五天40小时吐血整理】 【JVM工作原理】 【初探JVM原理与结构】 【JVM原理和. 阅读详情

相关推荐

JVM调优面试题——垃圾回收专题

1、如何确定一个对象是垃圾?1.1、引用计数法1.2、可达性分析2、对象被判定为不可达对象之后就“死”了吗?3、都有哪些垃圾收集算法?3.1、标记-清除(Mark-Sweep)3.2、标记-复制(Mark-Copying)3.3、标记-整理(Mark-Compact)3.4、分代收集算法3.5、三色标记4、什么是STW(stoptheworld)?5、你知道哪些垃圾收集器?5.1、Serial5.2、SerialOld5.3、ParNew5.4、ParallelScavenge5.5、ParallelOld

二蛋的博客 4005

JVM-03:JVM垃圾收集器面试题

JVM垃圾收集算法及垃圾收集器

xiaozhang960825的博客 1436

Java面试题:GC垃圾回收机制

GC垃圾回收(Garbage Collection的简称):当需要分配的内存空间不再使用的时候,JVM将调用垃圾回收机制来回收不再使用的内存空间。系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储空间。在程序运行中会不断地创建很多的对象,这些对象数据会占用系统内存,如果得不到有效的管理,内存的占用会越来越多,甚至会出现内存溢出的情况,所以需要对内存进行合理地释放,这个时候就要用到GC垃圾回收机制。

m0_74825699的博客 1548

JVM垃圾回收机制与 OOM异常

JVM垃圾回收机制与 OOM异常为什么需要垃圾回收什么地方需要进行垃圾回收堆GC新生代老年代 为什么需要垃圾回收 首先我们来聊聊为什么会需要垃圾回收,假设我们不进行垃圾回收会造成什么后果,我们举一个简单的例子 我们住在一个房子里面,我们每天都在里面生活,然后垃圾都丢在房子里面,又不打扫,最后房子都是垃圾 我们是不是就没法住下去了。 所以JVM垃圾回收机制也是一样的,当我们创建的对象占据堆空间要满了的的时候我们就对他进行垃圾回收,注意java的垃圾回收是不定时的,c语言的是需要去调用垃圾回收方法 刚刚也说到

Old_port的博客 3785

JVM 有哪些垃圾回收算法?

JVM垃圾回收算法 标记-清除算法 该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。也可以反过来先标记所有不需要被回收的对象,标记完成以后回收没有被标记的对象。 优缺点: 执行效率不稳定,适用于对象存过较多的区域,适用于老年代会产生内存碎片 何为清除? 标记清除并不是真的置空,而是把需要清除的对象地址保存在空闲的地址列表里。下次有新对象需要加载时,判断垃圾的位置空间是否够,如果够,就存放。 复制算法 将可用内存分为大小...

m0_58559010的博客 1569

一堵隔墙砌在哪:NewRatio的真实语义、收集器差异与按存活曲线定容新生代解析

NewRatio是老年代与新生代之比,新生代等于堆除以NewRatio加一,只能取整数。本文结合JDK8与17源码和实测说明:-Xmn优先于它;CMS未显式设置时按GC线程数定容,4核4GB堆仅给332.8MB;G1显式设置会关闭停顿目标伸缩;ZGC不读取它。文章把蓄水池模型补成可计算的账:Young GC间隔取决于Eden与分配速率,晋升量取决于存活曲线与Survivor,老年代须容纳常驻数据并留出最坏晋升余量。实验显示Parallel最优点紧贴连环Full GC悬崖,CMS则平缓地下降。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

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

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

爱好技术的小老头 1万+

硬件学习笔记(器件篇)—— 磁珠与磁环

因为有这些差别,所有经常会让人们觉得他们并不是一类器件,但实际上他们的原理是一样的。我们使用磁珠是为了利用损耗消耗高频能量,所以如果我们理解了磁珠是如何消耗高频能量的,我们就能理解磁珠的工作原理。

y_u_yu_yu_的博客 1万+

JVM常见面试题

JVM场景面试

给自己一个smile 1万+

零基础玩转NILM:用nilmtk提取UKDALE电器数据的保姆级教程

本文为零基础用户提供了一份详细的NILM入门指南,重点讲解如何使用nilmtk工具包从UKDALE数据集中提取电器级用电数据。教程涵盖环境搭建、核心概念解析、数据提取实战及常见问题排查,帮助读者快速掌握非侵入式负荷监测的数据预处理关键步骤。

rgv234567的博客 499

ISCE2+MintPy环境搭建实战:用Anaconda五分钟搞定InSAR处理全家桶

本文提供了一份详细的ISCE2+MintPy环境安装教程,旨在帮助InSAR处理初学者快速搭建开发环境。通过使用Anaconda创建虚拟环境并配置国内镜像,用户可在五分钟内一键安装ISCE2和MintPy全家桶,有效解决依赖冲突和版本兼容性问题,让用户能专注于数据处理本身。

2y3u4i5o6p的博客 1006

JVM垃圾回收面试题详解

第一部分:面试题 本次分享我们将尝试回答以下问题: GC 是什么? 为什么要有 GC? 简单说一下java的垃圾回收机制。 JVM的常见垃圾回收算法有哪些? 为什么要使用分代回收机制? 如何判断一个对象是否存活? 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存? 第二部分:深入原理 好,让我们开始吧。还是那句话,如果时间不够可以直接拉到最后看答案。 jav...

Java笔记 8845

ICT模拟零件测试方法--电容测试

通常,小到 100 pF 的电容需要补偿,因为夹具和系统的电容(20 到 50 pF)相对于被测设备的值是显著的。软件在需要补偿的电容测试中加入 comp 选项,而在不需要补偿的电容测试中加入 nocomp 选项。在调试期间,通过向电容语句添加 pc 选项验证您的电容测试。在测试单独的电容时,从测量结果中减去学到的值,然后与测试限制进行比较以决定通过或失败。请注意,如果用于需要补偿的电容测试上的感应总线使用了单独的探针,测量将无效。在测试电容时,应注意两个方面:电容的电阻元件,以及夹具和系统本身的电容。

可可南木的博客 1222

面试之JVM垃圾回收

可达性分析法就是目前的主流算法,也是java正在使用的算法。它的做法是,通过一系列被称为“GC Roots”的对象作为起点,从这些起点开始往下搜索,搜索所走过的路径称为引用链(Reference Chain)。当一个对象没有和任何引用链相连,即称为该对象不可达(图论的说法),认为该对象死亡。来看下面这张图:上图中A、B、C都跟GC Roots有直接或间接的引用关系,所以是存活对象。而D、E、F虽然相互之间有引用,但是和GC Roots并无引用关系,所以是死亡对象。

NBlinge的博客 1674

避开命令行!在VMware vCenter 8.0图形化界面里搞定SSL证书续期全流程

本文详细介绍了在VMware vCenter 8.0图形化界面中完成SSL证书续期的全流程,包括计算机SSL证书、VMCA根证书和STS证书的管理。通过可视化操作,管理员无需使用命令行即可高效处理证书问题,确保vSphere环境的稳定运行。文章还提供了证书监控与预警配置的实用技巧,帮助用户提前规避证书过期风险。

weixin_27051161的博客 284

YOLO环境配置+项目启动全流程(Conda+PyCharm超详解)

YOLO(You Only Look Once)是一个基于深度学习的目标检测算法,广泛应用于智能识别领域。本篇保姆级教学将手把手教你如何从零开始运行一个YOLO项目,适合完全没有基础的新手。

一键难忘的博客 1542

JVM垃圾回收面试题及原理

介绍对象什么时候可以被垃圾器回收、垃圾回收算法、JVM中的分代回收、垃圾回收器、强引用、软引用、弱引用、虚引用的区别的原理及相关面试题

2303_81059616的博客 1653

喷涂机器人系列编程:ABB IRB 5500_(2).ABB IRB 5500喷涂机器人系统架构与组件

ABB IRB 5500喷涂机器人系统不仅在性能上表现出色,而且在安全和维护方面也提供了全面的解决方案。通过本文的详细介绍,希望读者能够更好地理解和掌握这一系统的架构和功能,为实际应用提供有力支持。

zhubeibei168的博客 779

JVM面试题之JVM垃圾回收篇

JVM高频面试题垃圾回收算法、垃圾回收器、JVM调优内容介绍

Java码农杂谈 1480

SDR 和 DDR 的区别

SDR 和 DDR 的差别,最明显提现在传输速率和频率上。DDR SDRAM与SDRAM的基本结构是相似的,最根本的区别在于DDR 支持在一个时钟周期内传输两次数据,,SDR 只能传输一次数据。

串起点滴 1961

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【JVM】垃圾回收机制

垃圾回收机制、方法区的回收、堆回收、基本介绍、五种对象引用、垃圾回收算法 标记清除算法、复制算法、标记整理算法、分代垃圾回收算法、垃圾回收器 、Serial 收集器、ParNew 收集器、Parallel Scavenge 收集器、CMS 收集器、Serial Old 收集器、Parallel Old 收集器、G1垃圾回收器、总结、相关面试题

Yinin.的博客 1358

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

面试题:JVM的垃圾回收

垃圾判定法、垃圾回收器、强软弱虚引用

人言束负兑生|完美是完蛋的开始 1732

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JVM篇--垃圾回收高频面试题

首先在java运行过程中,其实程序员并不需要去显示的调用程序来释放对象的内存,而是由虚拟机来完成的,具体来看是在jvm中有个垃圾回收线程,这个线程是个守护线程,这个线程会在虚拟机空闲或者在当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。回收后,已用和未用的内存都各自一边。其实jvm的垃圾回收,在我们一开始创建对象的时候,GC就会去监控这个对象的地址,大小和使用情况,而jvm在进行回收的时候主要是采用了可达性分析算法,通过这种方式确定哪些对象是"可达。

m0_37900506的博客 1883

JVM 如何完成垃圾回收?

但无论使用哪种垃圾回收器,我们的编码方式还是会影响垃圾回收的效果,减少对象的创建,及时切断与不再使用对象的联系,是我们平常编码中一定要注意的。这就是程序计数器的功能。JVM 的垃圾回收器更新很快,也有非常多的 JVM 版本,比如 Zing VM、Dalvik,目前被广泛应用的是 Hotspot,提供了海量的配置参数来支持我们的性能微调。如 JVM 内存区域划分图所示,JVM 中占用内存最大的区域,就是堆(Heap),我们平常编码创建的对象,大多数是在这上面分配的,也是垃圾回收器回收的主要目标区域。

sytdsqzr的博客 817

DAY01 - JVM - 垃圾回收机制详解 - 4. 垃圾回收

在这类语言中,没有内置的垃圾回收机制。程序员需要,否则就会造成。内存泄漏是指,如果长时间积累,会导致,甚至程序崩溃。在这段代码中,程序通过死循环不停创建Test类的对象,每次循环结束后对象就已经不再使用了,但没有主动删除它们,最终造成内存泄漏。在这段代码中,程序显式调用delete删除对象,避免了内存泄漏。我们称这种回收过程为。在 C/C++ 中,这属于。

tang7mj的博客 1120
上一篇: 【Java进阶营】java面试题 --- JVM之内存分配
下一篇: 【Java进阶营】15个Java面试题含答案
宇小哥
博客等级 码龄5年 4粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值