没有合适的资源?快使用搜索试试~ 我知道了~
2023JVM面试题及答案-共45道.docx
1 下载量 53 浏览量
2023-07-17
16:20:20
上传
评论
收藏 29KB DOCX 举报
温馨提示
试读
12页
2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx
资源推荐
资源详情
资源评论
栈帧里面包含哪些东西?
局部变量表、操作数栈、动态连接、返回地址等
程序计数器有什么作用?
程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。
这里面存的,就是当前线程执行的进度。程序计数器还存储了当前正在运行的流程,包括正在执
行的指令、跳转、分支、循环、异常处理等。
字符串常量存放在哪个区域?
1、字符串常量池,已经移动到堆上(jdk8 之前是 perm 区),也就是执行 intern 方法后存的地方。
2、类文件常量池, constant pool,是每个类每个接口所拥有的,这部分数据在方法区,也就是元
数据区。而运行时常量池是在类加载后的一个内存区域,它们都在元空间。
你熟悉哪些垃圾收集算法?
标记清除(缺点是碎片化) 复制算法(缺点是浪费空间) 标记整理算法(效率比前两者差) 分代收集算
法(老年代一般使用“标记-清除”、“标记-整理”算法,年轻代一般用复制算法)
Java 里有哪些引用类型?
1、强引用这种引用属于最普通最强硬的一种存在,只有在和 GC Roots 断绝关系时,才会被消灭
掉。
2、软引用软引用用于维护一些可有可无的对象。在内存足够的时候,软引用对象不会被回收,只
有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,
才会抛出内存溢出异常。可以看到,这种特性非常适合用在缓存技术上。比如网页缓存、图片缓
存等。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回
收,Java 虚拟机就会把这个软引用加入到与之关联的引用队列中。
3、弱引用弱引用对象相比较软引用,要更加无用一些,它拥有更短的生命周期。当 JVM 进行垃圾
回收时,无论内存是否充足,都会回收被弱引用关联的对象。弱引用拥有更短的生命周期,在 Java
中,用 java. lang. ref. WeakReference类来表示。它的应用场景和软引用类似,可以在一些对内存更加
敏感的系统里采用。
4、虚引用这是一种形同虚设的引用,在现实场景中用的不是很多。虚引用必须和引用队列
(ReferenceQueue)联合使用。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何
时候都可能被垃圾回收。实际上,虚引用的 get,总是返回 null。
JVM 怎么判断一个对象是不是要回收?
引用计数法(缺点是对于相互引用的对象,无法进行清除) 可达性分析
GC Roots 有哪些?
1、GC Roots 是一组必须活跃的引用。用通俗的话来说,就是程序接下来通过直接引用或者间接引
用,能够访问到的潜在被使用的对象。
2、GC Roots 包括:Java 线程中,当前所有正在被调用的方法的引用类型参数、局部变量、临时值
等。也就是与我们栈帧相关的各种引用。所有当前被加载的 Java 类。Java 类的引用类型静态变量。
运行时常量池里的引用类型常量(String 或 Class 类型)WM 内部数据结构的一些引用,比如
sun. jvm. hotspot. memory. Universe 类。用于同步的监控对象,比如调用了对象
的 wait()方法。JNI handles,包括 global handles 和 local handles。
3、这些 GC Roots 大体可以分为三大类,下面这种说法更加好记一些:活动线程相关的各种引用。
类的静态变量的引用。JNI 引用。
4.有两个注意点:我们这里说的是活跃的引用,而不是对象,对象是不能作为 GC Roots 的。GC 过
程是找出所有活对象,并把其余空间认定为“无用” 而不是找出所有死掉的对象,并回收它们占用
的空间。所以,哪怕 JVM 的堆非常的大,基于 tracing 的 GC 方式,回收速度也会非常快。
你知道哪些 GC 类型?
Minor GC:发生在年轻代的 GC。Major GC:发生在老年代的 GC。Full GC:全堆垃圾回收。比如
Metaspace 区引起年轻代和老年代的回收。
对象都是优先分配在年轻代上的吗?
不是。当新生代内存不够时,老年代分配担保。而大对象则是直接在老年代分配。
你了解过哪些垃圾收集器?
年轻代 Serial 垃圾收集器(单线程,通常用在客户端应用上。因为客户端应用不会频繁创建很多对
象,用户也不会感觉出明显的卡顿。相反,它使用的资源更少,也更轻量级。) ParNew 垃圾收集
器(多线程,追求降低用户停顿时间,适合交互式应用。) Parallel Scavenge 垃圾收集器(追求 CPU
吞吐量,能够在较短时间内完成指定任务,适合没有交互的后台计算。)
老年代 Serial Old 垃圾收集器 Parallel Old 垃圾收集器 CMS 垃圾收集器(以获取最短 GC 停顿时间为
目标的收集器,它在垃圾收集时使得用户线程和 GC 线程能够并发执行,因此在垃圾收集过程中用
户也不会感到明显的卡顿。)
说说 CMS 垃圾收集器的工作原理
Concurrent mark sweep(CMS)收集器是一种年老代垃圾收集器,其最主要目标是获取最短垃圾回收停
顿时间,和其他年老代使用标记-整理算法不同,它使用多线程的标记-清除算法。最短的垃圾收集
停顿时间可以为交互比较高的程序提高用户体验。CMS 工作机制相比其他的垃圾收集器来说更复
杂
整个过程分为以下 4 个阶段:
1.初始标记只是标记一下 GC Roots 能直接关联的对象,速度很快,仍然需要暂停所有的工作线程。
2、并发标记进行 GC Roots 跟踪的过程,和用户线程一起工作,不需要暂停工作线程。
3、重新标记为了修正在并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象
的标记记录,仍然需要暂停所有的工作线程。
4、并发清除清除 GC Roots 不可达对象,和用户线程一起工作,不需要暂停工作线程。由于耗时最
长的并发标记和并发清除过程中,垃圾收集线程可以和用户线程一起并发工作,所以总体上来看
CMS 收集器的内存回收和用户线程是一起并发地执行。
说说 G1 垃圾收集器的工作原理
优点:指定最大停顿时间、分 Region 的内存布局、按收益动态确定回收集
1、G1 开创的基于 Region 的堆内存布局是它能够实现这个目标的关键。虽然 G1 也仍是遵循分代收
集理论设计的,但其堆内存的布局与其他收集器有非常明显的差异:G1 不再坚持固定大小以及固
定数量的分代区域划分,而是把连续的 Java 堆划分为多个大小相等的独立区域(Region),每一个
Region都可以根据需要,扮演新生代的 Eden空间、Survivor空间,或者老年代空间。收集器能够对
扮演不同角色的 Region 采用不同的策略去处理,这样无论是新创建的对象还是已经存活了一段时
间、熬过多次收集的旧对象都能获取很好的收集效果。
2、虽然 G1 仍然保留新生代和老年代的概念,但新生代和老年代不再是固定的了。它们都是一系
列区域(不需要连续)的动态集合。G1 收集器之所以能建立可预测的停顿时间模型,是因为它将
Region 作为单次回收的最小单元,即每次收集到的内存空间都是 Region 大小的整数倍,这样可以
有计划地避免在整个 Java 堆中进行全区域的垃圾收集。更具体的处理思路是让 G1 收集器去跟踪各
个 Region 里面的垃圾堆积的“价值”大小,价值即回收所获得的空间大小以及回收所需时间的经验
值,然后在 后 台 维 护一个优先级列 表 , 每 次根据用户设定允 许 的 收集停顿时间( 使 用 参 数-
XX:MaxGCPauseMillis 指定,默认值是 200 毫秒),优先处理回收价值收益最大的那些 Region,这也就是
“Garbage First”名字的由来。这种使用 Region 划分内存空间,以及具有优先级的区域回收方式,保
证了 G1 收集器在有限的时间内获取尽可能高的收集效率。
3、G1 收集器的运作过程大致可划分为以下四个步骤:·初始标记 (Initial Marking):仅仅只是标记
一下 GC Roots 能直接关联到的对象,并且修改 TAMS 指针的值,让下一阶段用户线程并发运行时,
能正确地在可用的 Region 中分配新对象。这个阶段需要停顿线程,但耗时很短,而且是借用进行
Minor GC 的时候同步完成的,所以 G1 收集器在这个阶段实际并没有额外的停顿。·并发标记
(Concurrent Marking):从 GC Root 开始对堆中对象进行可达性分析,递归扫描整个堆里的对象图,找
出要回收的对象,这阶段耗时较长,但可与用户程序并发执行。当对象图扫描完成以后,还要重
新处理 SATB 记录下的在并发时有引用变动的对象。·最终标记 (Final Marking):对用户线程做另
一个短暂的暂停,用于处理并发阶段结束后仍遗留下来的最后那少量的 SATB 记录。筛选回收
(Live Data Counting and Evacuation):负责更新 Region 的统计数据,对各个 Region 的回收价值和成本进
行排序,根据用户所期望的停顿时间来制定回收计划,可以自由选择任意多个 Region 构成回收集,
然后把决定回收的那一部分 Region 的存活对象复制到空的 Region 中,再清理掉整个旧 Region 的全
部空间。这里的操作涉及存活对象的移动,是必须暂停用户线程,由多条收集器线程并行完成的。
从上述阶段的描述可以看出,G1 收集器除了并发标记外,其余阶段也是要完全暂停用户线程的
说说 ZGC 垃圾收集器的工作原理
内存布局·小型 Region(Small Region):容量固定为 2MB, 用于放置小于 256KB 的小对象。中型
Region(Medium Region):容量固定为 32MB,用于放置大于等于 256KB 但小于 4MB 的对象。·大型
Region(Large Region):容量不固定,可以动态变化,但必须为 2MB的整数倍,用于放置 4MB或以上
的大对象。每个大型 Region 中只会存放一个大对象,这也预示着虽然名字叫作“大型 Region”,但
它的实际容量完全有可能小于中型 Region,最小容量可低至 4MB。大型 Region 在 ZGC 的实现中是
不会被重分配(重分配是 ZGC 的一种处理动作,用于复制对象的收集器阶段,稍后会介绍到)的,因
为复制一个大对象的代价非常高昂。
剩余11页未读,继续阅读
资源评论
小码叔
- 粉丝: 4143
- 资源: 1181
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- YOLOV4-TINY权重文件
- 以下是一个使用贪心算法解决多机调度问题的基本步骤0.txt
- 基于大数据的房产估价是近年来随着技术的发展而兴起的一种新型估价方法.txt
- 企业供应链管理系统v3.rar
- 富芮坤FR8016HA蓝牙开发板使用手册+硬件PCB图+封装库+DEMO演示软件源代码.zip
- 基于YOLOv7的芯片表面缺陷检测系统
- 京东物流 数字化供应链综合研究报告2018.rar
- 基于YOLOv7的植物虫害识别&防治系统
- 2000.1-2023.8中国经济政策不确定性指数月度数据.xlsx
- Screenshot_2024-04-21-20-42-15-443_com.tencent.mm.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功