腾讯面试:Java对象存在JVM堆中的具体什么区域?

腾讯面试题,场景是这样的:面试官先问了JVM GC手段,我说了Root可达性分析法,然后面试官又问:按你说的,Root可达性分析法需要扫描所有对象,以确定哪些对象是和GC Roots连在一起的,哪些对象是独立的,那些独立的对象就是需要被回收的垃圾对象,对吧?那如何实现“扫描所有对象”这个操作呢?所有被创建的对象存在什么地方?我说内存中的堆,他又问“那我需要扫描整个堆吗?还是只需要扫描什么特定区域就行了?”我感觉他的意思是问我对象是存在堆中的什么区域,但是这个我真不知道,而且面完后搜了一下也没搜出个什么所以然来,所以就想求助广大牛友,这题该怎么回答?
#Java开发##腾讯#
全部评论
嗯…你不是第一个被腾讯问到这个问题的人,我感觉可能也不是最后一个😂😂
1 回复 分享
发布于 2022-02-13 11:42
(回帖有字数限制,删除了很多内容)知识储备:(详解还是要看JVM篇章) 一、垃圾回收大致分为三大类别 |          | MinorGC            | MajorGC                      | FullGC                                                        二、可达性分析法的实现过程 1. 确定GCRoots。一般包含以下几个重要成分可能作为GCRoots    1. 虚拟机栈和本地方法栈中引用的对象    2. 堆中的字符串常量池和静态变量    3. 。。。 2. 从GCRoots开始遍历整个引用链,并将其标记为可存活。之后回收其他未被标记的即可 三、一个对象在堆的各个代中的流转过程(特殊情况除外:大对象等) 1. 对象创建之初一般在年轻代的Eden区 2. 当Eden满了之后触发MinorGC来将Eden和From区中可活对象放入To区。如果满了放入老年代。如果From中对象生存周期超过阀值则放入老年代 3. 然后调转From区和To区的定义 4. 如果遇到老年代空间满了就进行一次MajorGC。如果MajorGC之后还是不足就触发FullGC 问题一:根据不同的GC方式,扫描的区域也不同,也区别于不同的垃圾收集器。 + Parallel:严格的年轻代和老年代,在回收的时候扫描固定区域 + G1:针对分区算法,以及启动时配置的参数来跟踪并计算,在这个不超过最大时间间隔内回收哪些区的空间能做到最优。 问题二:一般对象创建之后就会出现在Eden区域,但是对于一些字符串常量、静态变量,则会出现在堆空间的字符串常量池中(字符串常量池是在JDK7之后才在堆中的)。对于一些Eden中存放不在的大对象可能会出现在老年代,此间可能会触发FullGC等情况 问题三:根据上述知识储备,不同的GC方式和不同的垃圾收集器,扫描的地方是不一样的,具体可以看知识储备。
点赞 回复 分享
发布于 2022-02-22 18:03
应该是想引安全点,oopmap,卡表之类的
点赞 回复 分享
发布于 2022-02-18 20:28
回答三色标记算法?
点赞 回复 分享
发布于 2022-02-18 14:53
哪个部门呀
点赞 回复 分享
发布于 2022-02-16 13:36
个人看法的不一定对,Java堆内存分为新生代老年代,新生代又分为edn区s1和s2区,我们创建一个对象后会分配在edn区,每次垃圾回收后会将edn区存活对象移入s1,同时清空edn区。而s1和s2就是复制清除算法了,每次将存活的对象移到空的区域然后清空。对象每次转移年龄增大一岁,到了一定阈值(默认15)后移入老年代,而老年代使用cms垃圾收集器的话就使用的标记清楚算法,标记存活然后过一遍所有对象,没标记的回收。
点赞 回复 分享
发布于 2022-02-16 11:30
是不是指oopmap
点赞 回复 分享
发布于 2022-02-15 22:22
沿着GC ROOT引用链搜索,搜索不到的就是垃圾。从这点来看,应该会记录那些是GC ROOT(个人推测)
点赞 回复 分享
发布于 2022-02-12 12:55
新老永久代吧
点赞 回复 分享
发布于 2022-02-12 11:13

相关推荐

04-02 17:22
新疆大学 Java
1. 你在这个物流平台项目中扮演的角色是什么?主要负责后端的哪一部分?2. 能简单介绍一下你负责的核心模块(货单大厅)的业务流程吗?3. 货单大厅里高频使用的多条件组合查询,你后端的存储用的是什么?4. 这个查询对应的数据量有多大?5. 除了 MySQL,你有考虑过用别的存储引擎做这种多条件检索吗?有没有必要?如果要换,应该用什么来做?6. 简历上写了 SQL 优化,整个问题是怎么发现,然后怎么解决的?7. 什么是回表?8. 你用 EXPLAIN 发现查询慢,具体是因为没有用索引,还是索引没用对?9. 联合索引的“最左匹配原则”知道吗?具体是什么意思?10. “迷你豆包”这个项目是干什么用的?主要是出于什么考虑要做这个项目?11. 能简单介绍一下这个项目中你觉得比较感兴趣的技术点吗?12. 进程和线程的区别是什么?13. 进程的上下文切换和线程的上下文切换是怎么做的?包含了哪些步骤?14. 什么是虚拟内存?使用虚拟内存有什么好处?15. 缺页中断(Page Fault)是什么意思?16. 操作系统里面有哪些锁?(或 Java 里面有哪些锁?)17. 如果 synchronized 和 ReentrantLock(可重入锁)两个选的话,优先选哪个?为什么?18. 正常情况下(单体服务中),默认应该优先选哪个锁?19. 知道 BIO、NIO、AIO 吗?BIO 的“同步阻塞”是什么意思?20. 简单介绍一下 TCP 的三次握手和四次挥手过程。21. 为什么 TCP 建立连接需要三次握手?22. TIME_WAIT 状态出现在四次挥手的什么时候?23. TIME_WAIT 状态会持续多长时间?24. HTTP 状态码 404(找不到页面)代表什么?这是服务端的问题还是客户端的问题?25. HTTP 状态码 504 一般出现在什么情况下?26. 在浏览器里面输入一个网址,到页面最终展示出来,这中间经历了怎样的过程?27. 什么是 TCP 的粘包和拆包?28. 怎么解决粘包和拆包的问题?29. MySQL InnoDB 引擎的索引使用的是什么树结构?B+树和B树的区别是什么?30. 为什么 MySQL 采用 B+树,而不用红黑树?31. 听说过幻读吗?解释一下什么是幻读。32. 怎么解决幻读问题?33. 幻读在什么隔离级别下可以解决?34. 一般怎么解决 Redis 缓存与 MySQL 数据库的缓存一致性问题?35. JVM 的内存模型(运行时数据区)包括哪些部分?36. 字符串(String)和数字在 JVM 中分别存放在哪里?37. 垃圾回收(GC)算法有哪些?38. CMS 和 G1 垃圾回收器的区别是什么?它们分别应对什么场景?39. 为什么到了 JDK 1.8 之后开始主流推荐使用 G1?CMS 有什么缺点?40. 相比之下,CMS 和 G1 谁的 GC 停顿时间会更长?为什么?41. HashMap 和 ConcurrentHashMap 的区别是什么?42. ConcurrentHashMap 是怎么做到线程安全的?43. 简单介绍一下 Spring 的控制反转(IOC)和面向切面编程(AOP)。44. AOP 的核心底层是使用什么机制实现的?45. 我们平时写个注解就能生效,注解的基本原理是什么?它为什么能把逻辑织入到代码运行路径中?46. 你平时是怎么使用 AI 辅助开发的?你的项目代码是直接用 AI 写的吗?47. RAG(检索增强生成)的一个完整运行流程是怎样的?48. 为什么要做 RAG 这个东西?它解决了什么问题?49. Token 和上下文窗口(Context Window)的概念分别是什么意思?50. 为什么要控制 Token 的数量?51. 大模型的“幻觉”是什么意思?是怎么产生的?
面试问题记录
点赞 评论 收藏
分享
评论
点赞
32
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务