Java岗大厂面试百日冲刺【Day41】— JVM3 (日积月累,每日三题)

本文解析了Java面试中的常见问题,涉及对象存活判断、GCRoots的识别以及对象引用方式,强调了Java垃圾收集器GC的工作原理和面试中可能遇到的深度问题。涵盖了Java基础知识、框架、并发编程和JVM等多个技术领域。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!


车票

  • 面试题1:如何判断对象是否存活

  • 面试题2:哪些对象可以作为GC Roots?

  • 面试题3:你了解的对象引用方式都有哪些?

  • 每日小结


本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识集合容器并发编程JVMSpring全家桶MyBatis等ORMapping框架MySQL数据库Redis缓存RabbitMQ消息队列Linux操作技巧等。

地球人都知道,Java有个东西叫垃圾收集器(GC),它让创建的对象不需要像c/c++那样delete、free掉,你能不能谈谈,GC是在什么时候,对什么东西,做了什么事情?

这个是经典抛砖引玉的问法,既能看出我们对GC掌握的情况,也能从多点切入深问,看着三句话,其实每句话的知识点都够我们喝一壶的。JVM接下来三篇会以:什么时候进行GC对哪些对象做哪些处理三个角度的面试问题进行整理,来吧,卷。

本篇的内容为第二篇,主要基于对哪些对象这个方向来学习,大家有问题请在评论区喷我或互喷,喷出来的问题才会印象深刻

对哪些对象,对于GC垃圾回收来说很好理解,当然是针对垃圾,或者说堆中占着茅坑不拉屎(无引用)的对象,将这类对象的内存释放,给新的对象腾出坑来(空间)。

这些垃圾我们通常把他们称为已死亡对象可回收对象

说到这里突然有了一丝丝伤感。是的,有些人20岁的时候已经死了,只是80岁才埋。比如。。。

这短短的一生,我们最终都会失去。你不妨大胆一些,爱一个人,攀一座山,追一个梦!《大鱼海棠》

在这里插入图片描述

面试题1:如何判断对象是否存活

==============================================================================

对于判断对象是否存活,主要是两种基本算法,引用计数和可达性分析,目前java主要采用的是可达性分析算法

1.引用计数算法

判断对象是否存活的方式如:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的

其优点是实现简单,判定效率高;缺点是该算法有很多例外情况要考虑,必须要配合大量额外处理才能保证正确地工作,且存在一个基本的难题,也就是很难处理循环引用关系。

2.可达性分析算法

其原理简单来说,就是将对象及其引用关系看作一个图,通过一系列称为GC Roots的根对象作为起始节点集,从这些节点开始,通过引用关系向下搜索,搜索过程所走过的路径称为引用链(Reference Chain),如果一个对象和 GC Roots 之间不可达,也就是不存在引用链条,那么即认为是可回收对象。JVM会把虚拟机栈和本地方法栈中正在引用的对象、静态属性引用的对象和常量,作为 GC Roots。

在这里插入图片描述

如图所示,对象object 5、object 6、object 7虽然互有关联,但是它们到GC Roots是不可达的, 因此它们将会被判定为可回收的对象。


在这里插入图片描述

课间休息,又来秀一下来自咱们群里同学家里的昙花。

作者:小梅同学


面试题2:哪些对象可以作为GC Roots?

=====================================================================================

在Java技术体系里面,固定可作为GC(Garbage Collector) Roots的对象包括以下几种:

在这里插入图片描述

常说的GC(Garbage Collector) roots,特指的是垃圾收集器的根对象(GC Root Object),也叫作称为GC垃圾回收根(GC Root),GC会收集那些不是GC roots且没有被GC roots引用的对象清理掉

一个对象可以属于多个root,GC root存在几下种:

  • 虚拟机栈中引用 的对象

  • 如各个线程被调用的方法堆栈中使用到的 参数、局部变量、临时变量等。

  • 方法区中类静态属性引用的对象

  • 如Java 类的引用类型静态变量

  • 方法区中常量引用的对象

  • 如字符串常量池(String Table) 里的引用

  • 本地方法栈内 JNI(通常说的本地方法)引用的对象

  • 所有被同步锁 (synchronized关键字) 持有的对象

  • Java 虚拟机内部的引用

  • 如基本数据类型对应的Class对象,一些常驻的异常对象(比如 NullPointExcepiton、OutOfMemoryError)、系统类加载器等。

  • 反映 Java 虚拟机内部情况的 JMXBean、JVMTI 中注册的回调、本地代码缓存等。

  • 除了固定的 GC Roots 集合以外,根据用户所选用的垃圾收集器以及当前回收的内存区域不同,还可以有其他对象 临时性 地加入,共同构成完整 GC Roots 集合。


在这里插入图片描述

铁子们,快来猜猜这是哪里?

作者:名刀


面试题3:你了解的对象引用方式都有哪些?

===================================================================================

该回答来自极客时间《Java核心技术面试精讲第四讲》的评论部分。

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
式存储等等面试题笔记及资料**

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值