一些JVM面试题

Java垃圾回收器的原理

有三对常见的垃圾回收器:

在JDK1.8之前,有三种常见的垃圾回收器,

serial + serialOld 串行化的垃圾回收

PS + PO 多线程并行回收,可以动态调整堆内存的大小,关注系统的吞吐量

ParNew + CMS ParNew本质上是serial 在多线程下的优化,CMS关注系统的暂停时间,允许用户线程和垃圾回收线程在一些步骤中并发进行,从而降低了用户等待时间

在JDK1.8之后,默认使用G1垃圾回收器, 这个时候,堆的划分方式有变化,划分成相等的region,G1会根据最大暂停时间来确定一次GC中回收哪些region,而不是一次性把某个区域全部回收一遍

Java垃圾回收为什么要分为新生代和老年代

对象的生命周期:

大部分对象都是短暂存在的,真正能在堆中长期持有的对象是很少的,如果把不同存活时间的对象都放在一个区域管理回收,效率会很低

垃圾回收效率:

在新生代中,得益于minorGC可以比较频繁使用,新创建的对象如果被视作垃圾就会很快被回收

而老年代的fullGC的频率就较低,因为对象的生命周期更长

垃圾回收方法:

新生代中主要是采用复制算法,复制算法可以快速清除大量的垃圾对象

老年代中主要采用标记整理算法,因为它的对象存活率比较高

相关推荐
wang3zc1 小时前
HTML函数能否用外接显卡坞提升性能_eGPU对HTML函数帮助【汇总】
jvm·数据库·python
2301_781571421 小时前
mysql如何配置自增ID预留_mysql innodb_autoinc_lock_mode参数
jvm·数据库·python
dinglu1030DL2 小时前
CSS如何实现背景颜色的棋盘格分布_利用repeating-gradient
jvm·数据库·python
2303_821287382 小时前
Golang reflect反射怎么用_Golang反射教程【通俗】
jvm·数据库·python
2301_783848652 小时前
如何用 IDBKeyRange 范围匹配检索特定区间的本地数据
jvm·数据库·python
weixin_444012932 小时前
SQL处理大规模分组聚合的内存限制_调整服务器配置.txt
jvm·数据库·python
2401_867623983 小时前
SQL如何提取分组中的第一条记录_使用ROW_NUMBER定位数据
jvm·数据库·python
2401_850491654 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
ㄟ留恋さ寂寞4 小时前
如何修改数据库实例名_ORACLE_SID环境变量重命名实战
jvm·数据库·python
Season4504 小时前
C++11并发支持库(condition_variable | future全家桶)
java·jvm·c++