Java面试连环炮问题收集记录贴【JVM方面】
写这类文章是为了记录下网上看到的/自己经历的一些一环扣一环的面试问题,一方面提高自己的理论知识,另外一方面也给自己去参加面试或面试他人提供点参考和帮助。
问题一:
为什么一个对象会被GC?
对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有要执行finalize()方法。有必要执行finalize()方法的话,会把对象放置在一个叫做F-Queue的队列中,GC会对队列中的对象进行第二次小规模的标记,如果对象没有重新与引用链上的任何一个对象建立关联,则就被真正回收。
说白了就是一个对象不存在任何引用,然后就会被回收。
触发一个对象的回收:
1.对象没有引用
2.作用域发生捕获异常
3.程序在作用域正常执行完毕
4.程序执行了System.exit()
5.程序发生意外终止
问题二:为何会在这个时候发生GC?
1.新对象生成,在Eden申请空间失败。2.老年代被写满、持久代被写满(已经移除)、System.gc()被显示调用、上一次GC之后Heap的各域分配策略动态变化
问题三:GC都有哪些策略的分类?
这边应该是对于每个垃圾回收器的说明了。
新生代收集器:
1.Serial收集器
单线程执行GC 会引起"Stop The World" 虚拟机运行在Client模式下的默认新生代收集器 简单而高效(与其它收集器单线程比) 适用于用户桌面应用 采用复制算法
2.ParNew收集器
多线程执行GC 会引起"Stop The World" 虚拟机运行在Server模式下新生代收集器首选 因为需要配合老年代的CMS收集器工作 采用复制算法
3.Parallel Scavenger收集器(吞吐量优先收集器)
关注点达到一个可控制的吞吐量(CPU用于运行用户代码的时间与CPU总消耗时间的比值) 适用于后台计算而不需要太多交互的任务 GC自适应调节策略(-XX:+UseAdaptiveSizePolicy) 采用复制算法
老年代收集器
4.Serial Old收集器
单线程 适用于Client模式下 采用标记-整理算法
5.Parallel Old收集器
Parallel Scavenger的老年代版本 多线程 采用标记-整理算法 配合Parallel Scaverger 吞吐量优先的收集器才名副其实
6.CMS收集器
关注点尽可能地缩短垃圾收集器用户线程的停顿时间 采用标记-清除算法

过程看JVM书中的图比较清晰。
缺点:
对CPU资源非常敏感 CPU比较多的时候效果比较好(回收线程:(CPU数量+3)/4)
无法处理浮动垃圾 容易失败产生Concurrent Mode Failure,然后需要Serial Old收集器重新进行垃圾收集。
会产生大量空间碎片
7.G1收集器
基于标记-整理算法 精确控制停顿 将Java堆(包括新生代、老年代)划分多个大小固定的独立区域(Region),跟踪这些区域的垃圾堆积情况,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾 最多的区域
问题三:这些策略都有什么优劣势,适用于哪些场景?
这个问题也基本上都在上面了。
垃圾回收的博文:https://my.oschina.net/u/2380961/blog/750189
JVM的垃圾回收在幕后辛苦劳作,让我们"摆脱了"内存管理的负荷。听说Python就没有提供这么多的选择,等我都熟悉了得去比较下两者。
《深入理解Java虚拟机》值得一看,上面的内容都是基于书上第三章的。爱Java,爱生活!
Java面试连环炮问题收集记录贴【JVM方面】的更多相关文章
- java面试笔试题收集
转载过来看看.... J2SE基础 1. 九种基本数据类型的大小,以及他们的封装类. 2. Switch能否用string做参数? 可以 3. equals与==的区别. 4. Object有哪些公用 ...
- 大宇java面试系列(二):jvm组成部分
1. 说一下 JVM 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库接口(Na ...
- 大宇java面试系列(一):jvm垃圾回收
1. 说一下 JVM 有哪些垃圾回收算法? 标记-清除算法:标记无用对象,然后进行清除回收.缺点:效率不高,无法清除垃圾碎片. 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除 ...
- 阿里Java架构师面试高频300题:集合+JVM+Redis+并发+算法+框架等
前言 在过2个月即将进入9月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始考验一个Java程序员的技术功底和 ...
- Java 面试知识点解析(三)——JVM篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...
- 阿里、百度等多家公司Java面试记录与总结
算算自己大概面试了近十家公司,也拿到了几个Offer,现在面试告一段落,简单总结下面试经验. 我现在主要的方向是Java服务端开发,把遇到的问题和大家分享一下,也谈谈关于技术人员如何有方向的提高自己, ...
- java面试——jvm
背景:用来总结java面试过程中与jvm相关的问题. 垃圾回收以及优化总结 <JVM 垃圾回收器工作原理及使用实例介绍> 介绍常用的垃圾回收算法,垃圾收集器,垃圾收集器相关的调试参数. J ...
- Java面试准备之JVM
介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明 程序计数器:看做当前线程所执行的字节码行号指示器.是线程私有的内存,且唯一一块不报OutOfMemoryError异常. Java虚拟 ...
随机推荐
- cygwin 安装完后不能进入think问题,网上99%都是错误的
正确的做法是首次进入的时候,显示的是哪个用户名就修改哪个用户名 比如我的电脑是 默认显示的是think 那么就去修改think 为 root 并把unused 后的2个数字改成0 然后在home下新建 ...
- JavaScript的Dom操作
两个练习: 1.两个表单里面的数据相互移动: <style type="text/css"> select { width: 100px; position: rela ...
- Eclipse MySQL Hibernate 中文乱码问题
如果是Eclipse的问题,那就对以下各项进行设置,即可排除问题. 设置eclipse相关编码为UTF-8: 修改工作区默认编码,位置:windows--perferences--general--w ...
- HTML 内容居中方式总结
在HTML网页排版经常会用到关于对其方式的情况,水平居中和垂直居中.特别是水平居中,并不是一个简单的text-align就可以解决所有的情况. 开始之前普及一点HTML知识,目标很明显,不同的页面结构 ...
- linux 命令 之判断表达式
摘自http://www.comptechdoc.org/os/linux/usersguide/linux_ugshellpro.html Tests There is a function pro ...
- Jquery制作--焦点图淡出淡入
之前写了一个焦点图左右轮播的,感觉淡出淡入用得也比较多,就干脆一起放上来啦.这个容器用了百分比宽度,图片始终保持居中处理,定宽或者自适应宽度都是可以的. 兼容到IE6+以上浏览器,有淡出淡入速度和切换 ...
- win7系统下python安装numpy,matplotlib,scipy和scikit-learn
1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...
- Android 系统工具类SystemUtils
包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若 ...
- Qt-导入第三方库
Qt提供了显式和隐式导入第三方库方法,本文只介绍显示导入方法. 第三方提供的库文件包括ControlCAN.h,ControlCAN.dll和ControlCAN.lib.将ControlCAN.h和 ...
- bootstrap validate 实现页面动态验证(formvalidate)
关于基本的bootstrap validate 验证方法外面有许多博客上都有讲解,我就不在过多叙述了.大家也可以去看官网api:http://bv.doc.javake.cn/api/ 今天要说的是动 ...