当前位置:网站首页>JVM中的一些面试题
JVM中的一些面试题
2022-07-16 16:46:00 【灬繁花落雨灬】
1.JVM来及回收的时候如何确定垃圾以及谈谈你对GCRoots的理解
引用计数法和可达性分析来判断一个对象是不是垃圾- GC Roots用来做垃圾回收时的可达性分析的
- 可以用作GC Roots对象:
- 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。
- 方法区中的类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(Native方法)引用的对象
2. JVM调优和参数配置
新生代:1/3堆空间【Eden(8/10),From(1/10),To(1/10)】
老年代:2/3堆空间
jps -l # 查看正在运行的java程序
jinfo -flag PrintGCDetails 进程号 # 有没有开启PrintGCDetails
jinfo -flags 进程号 # 查看所有的参数信息
java -XX:+PrintFlagsInitial # 查看参数盘点家底
java -XX:+PrintFlagsFlagsFinal -version # 查看修改更新,:=表示修改更新过的值
java -XX:+PrintCommandLineFlags -version # 查看参数信息
XX参数设置:
boolean 类型:-XX:+或者-某个属性值- 例如:-XX:+PrintGCDetails
KV设值类型:-XX:属性key=属性值value- 例如:-XX:MetaspaceSize=1024m
-Xms等价于-XX:InitialHeapSize初始化堆内存,默认为物理内存的1/64-Xmx等价于-XX:MaxHeapSize最大堆内存,默认为物理内存的1/4-Xss等价于-XX:ThreadStackSize设置单个线程栈的大小,默认为512k~1024k-Xmn设置年轻代大小,一般这个参数都用默认的,不调整-XX:MetaspaceSize设置元空间大小-XX:SurvivorRatio设置新生代的新生代区比例,默认是8:1:1-XX:NewRatio设置新生代和老年代的比例,默认是1:2-XX:MaxTenuringThreshold设置垃圾最大年龄
3. 谈谈OOM
- StackOverflowError:栈溢出异常
- Java heap space:堆内存不足
- GC overhead limit exceeded:GC回收时间过长
- Direct buffer memory:直接内存不足
- unable to create new native thread:不能再创建新线程了
- Metaspace:元空间溢出
4. 垃圾收集器
Serial:为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程。Parallel:多个垃圾收集线程并行工作,此时用户线程是暂停的,适用于科学计算/大数据处理首台处理等弱交互场景。CMS:用户线程和垃圾收集线程同时执行(不一定是并行,可能交替执行),不需要停顿用户线程互联网公司多用它,适用对响应时间有要求的场景。G1:将堆内存分割成不同的区域然后并发的对其进行垃圾回收。
垃圾收集器:
- 新生代:
Serila:串行GCParallel/Parallel Scavenge:并行GC(默认的)ParNew:并行GC(为了和CMS联用) - 老年代:
Serial Old:老年代串行GCUseConcMarkSweepGC:并发标记GCUseParallelOldGC:老年代并行GC - 新生代老年代:
UseG1GC:G1
使用细节:
Serial收集器【Serial Old收集器】:
-XX:+UseSerialGC,开启后会使用Serial(Young区用)+Serial Old(Old区用)的收集器组合
表示:新生代、老年代都会使用串行回收收集器,新生代使用复制算法,老年代使用标记-整理算法
ParNew收集器:
-XX:+UseParNewGC,只影响新生代,不影响老年代。开启后会使用ParNew(Young区用)+Serial Old(Old区用)的收集器组合
表示:新生代用并行回收,老年代用串行回收,新生代使用复制算法,老年代使用标记-整理算法
Parallel收集器【Parallel Old收集器】:
-XX:+UserParallelGC,新生代和老年代都用并行收集器,新生代用Parallel,老年代用Parallel Old。
表示:新生代用复制算法,老年代使用标记-整理算法自适应调节策略是Parallel收集器和ParNew收集器的一个重要区别。(自适应策略:虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量)
CMS收集器:
- 一种并发标记清除收集器。
-XX:UseConcMarkSweepGC,开启该参数后会自动将-XX:UseParNewGC打开。开启该参数后,使用ParNew(Young区用)+CMS(Old区用)+Serial Old的收集器组合,Serial Old将作为CMS出错的后备收集器。
表示: 新生代用复制算法,老年代用标记-清除算法
G1收集器:
过程:
- 初始标记(CMS initial mark)
只是标记一下GC Roots能够直接关联的对象,速度很快,仍然需要暂停所有的工作线程。
- 并发标记(CMS concurrent mark)
进行GC Roots跟踪过程,和用户线程一起工作,不需要暂停工作线程。主要标记过程,标记全部对象。
- 重新标记(CMS remark)
为了修正并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录(例如垃圾被重新引用),仍然需要暂停所有的工作线程。
- 并发清除(CMS concurrent sweep)
清除GC Roots不可达对象,和用户线程一起工作,不需要暂停工作线程,基于标记结果,直接清理对象。
-XX:+UseG1GC:G1整体上采用标记-整理算法,局部是通过复制算法,不会产生内存碎皮。
特点:
- G1能够充分利用多CPU、多核环境硬件优势,尽量缩短STW。
- G1整体上采用标记-整理算法,
局部是通过复制算法,不会产生内存碎片。 - 宏观上看G1之中不再区分年轻代和老年代。
把内存划分成多个独立的子区域(Region),可以近似理解为一个围棋的棋盘。 - G1收集器里面讲整个的内存区都混合在一起了,
但其本身依然在小范围内要进行年轻代和老年代的区分,保留了新生代和老年代,但它们不再是物理隔离的,而是一部分Region的集合且不需要Region是连续的,也就是说依然会采用不同的GC方式来处理不同的区域。 - G1虽然也是分代收集器,但整个内存分区
不存在物理上的年轻代与老年代的区别,也不需要完全独立的survivor(to space)堆做复制准备。G1只有逻辑上的分代概念或者说每个分区都可能随G1的运行在不同代之间前后切换。
边栏推荐
- 股权分配协议(1)
- 【读书会第13期】+FFmpeg命令
- 安利一款笔记工具---Obsidian
- 11.滑动窗口的最大值——重要结构双端队列
- Android day 26: database two
- Horizon 8 test environment deployment (5): UAG deployment and load balancing configuration-1
- Unity mouse controls the capture and movement of 3D objects and UI (notes)
- [MySQL project practical optimization] convert multiple rows of data into the same row and multiple columns for display
- Unity DOTween插件和iTween插件使用(笔记)
- Company equity distribution reference
猜你喜欢

【MySql项目实战优化】多行数据转化为同一行多列显示
![[200 routines OpenCV] 232. Méthode spectrale de caractérisation](/img/54/77f420654cc49723fbdbe845023ec8.png)
[200 routines OpenCV] 232. Méthode spectrale de caractérisation

Vivado Ethernet interface (sgmii to gmii interface)

SI24R2E_ Smart electronic student card 2.4GHz attendance scheme chip

Tear ORM by hand (generic + annotation + reflection)

安卓 Day 26 :数据库Two

4.连接已终止的线程(回收线程)

2. Create a thread

Full power travel Wang Ying: Escort smart travel with data security

电影知识图谱和基于模板的问答系统构建
随机推荐
Horizon 8 测试环境部署(5): UAG 部署及负载均衡配置-1
Dark horse programmer - software testing -14 stage 3- function testing -66-77 Zen introduction, product manager uses Zen, super administrator uses Zen, super administrator modifies security strategy,
Vivado ROM IP core
Full marks for all! The Chinese team IMO won four consecutive titles, leading the second place South Korea by a big score
5道String高频面试题,拿捏String底层原理!
【GNN】跨域推荐系统中的图神经网络
Principles and factors of the design of the company's equity structure
Top level design scheme of the company's equity structure (case)
安卓 Day 26 :数据库Two
【读书会第13期】+FFmpeg命令
安卓 Day 27 :数据库One
leetcode 45. Jump Game II (dp)
leetcode 43. 字符串相乘 (字符串+模拟)
[机缘参悟-45]:鬼谷子-第九权篇-因人说话,投其所好
Equity distribution agreement (1)
Custom view
低代码三部曲之起因
【MySql项目实战优化】多行数据转化为同一行多列显示
射频芯片ATE测试从入门到放弃之收发机
leetcode 8. String to Integer (atoi)(string)