《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
车票
-
面试题1:如何判断对象是否存活
-
面试题2:哪些对象可以作为GC Roots?
-
面试题3:你了解的对象引用方式都有哪些?
-
每日小结
本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识
、集合容器
、并发编程
、JVM
、Spring全家桶
、MyBatis等ORMapping框架
、MySQL数据库
、Redis缓存
、RabbitMQ消息队列
、Linux操作技巧
等。
地球人都知道,Java有个东西叫垃圾收集器(GC),它让创建的对象不需要像c/c++那样delete、free掉,你能不能谈谈,
GC是在什么时候,对什么东西,做了什么事情?
这个是经典抛砖引玉的问法,既能看出我们对GC掌握的情况,也能从多点切入深问,看着三句话,其实每句话的知识点都够我们喝一壶的。JVM接下来三篇会以:什么时候进行GC
、对哪些对象
、做哪些处理
三个角度的面试问题进行整理,来吧,卷。
本篇的内容为第二篇,主要基于对哪些对象
这个方向来学习,大家有问题请在评论区喷我或互喷,喷出来的问题才会印象深刻
。
对哪些对象
,对于GC垃圾回收来说很好理解,当然是针对垃圾
,或者说堆中占着茅坑不拉屎(无引用)的对象,将这类对象的内存释放,给新的对象腾出坑来(空间)。
这些
垃圾
我们通常把他们称为已死亡对象
或可回收对象
。
说到这里突然有了一丝丝伤感。是的,有些人20岁的时候已经死了,只是80岁才埋。比如。。。
这短短的一生,我们最终都会失去。你不妨大胆一些,爱一个人,攀一座山,追一个梦!《大鱼海棠》
==============================================================================
对于判断对象是否存活,主要是两种基本算法,引用计数和可达性分析,目前java主要采用的是可达性分析算法
1.引用计数算法
判断对象是否存活的方式如:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的
。
其优点是实现简单,判定效率高;缺点是该算法有很多例外情况要考虑,必须要配合大量额外处理才能保证正确地工作,且存在一个基本的难题,也就是很难处理循环引用
关系。
2.可达性分析算法
其原理简单来说,就是将对象及其引用关系看作一个图,通过一系列称为GC Roots
的根对象作为起始节点集,从这些节点开始,通过引用关系向下搜索,搜索过程所走过的路径称为引用链(Reference Chain)
,如果一个对象和 GC Roots 之间不可达,也就是不存在引用链条,那么即认为是可回收对象
。JVM会把虚拟机栈和本地方法栈中正在引用的对象、静态属性引用的对象和常量
,作为 GC Roots。
如图所示,对象object 5、object 6、object 7虽然互有关联,但是它们到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 集合。
铁子们,快来猜猜这是哪里?
作者:名刀
===================================================================================
该回答来自极客时间《Java核心技术面试精讲第四讲》的评论部分。
总结
虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。
上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料
有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
式存储等等面试题笔记及资料**
有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!