一、内存区域与内存溢出异常
- java虚拟机运行时数据区?(内存空间分配)
- 简述基本概念:程序计数器,java虚拟机栈,本地方法栈,方法区,堆,运行时常量池,直接内存。
- 对象创建过程?(不是类加载过程)
- java中创建对象的5种方式?
- 对象的内存布局?(可以解释为什么wait方法,是对象方法,而sleep方法是线程方法。)
- java堆溢出?
- OutOfMemoryError异常。出现oom异常的情况有哪些?(可以根据运行时数据区特点来描述)
- StackOverflowError异常,虚拟机栈溢出和本地方法栈溢出异常简述?
- 本机直接内存溢出(Unsafe分配本机内存)?
- java运行时数据区 线程私有和线程公有的分类?
- jvm设置参数理解?
- -Xms
- -Xmx
- -Xss
- -Xmn
- -XX:MetaspaceSize
- -XX:MaxMetaspaceSize
- -XX:NewRatio
- -XX:SurvivorRatio
- -XX:+UserParNewGC
- -XX:+UserParallelOldGC
- -XX:+UseConcMarkSweepGC
- -XX:+PrintGC
- -XX:+PrintGCDetails:
- -XX:MaxTenuringThreshold:
- 出现内存泄漏的情况有哪些?举例说明。(至少6种)
- java对象的访问定位?
二、垃圾收集器与内存分配策略
总体来说这三个问题:哪些内存要回收?什么时候回收?如何回收?
- 引用计数算法的原理和优缺点?
- 可达性分析算法?
- 解释GC Roots,列举作为GCRoots对象包括哪几类?(这和导致内存溢出的原因有什么关系?)
- 引用的四种类型:强引用,软引用,弱引用,虚引用。
- 方法区的回收目的和回收对象(目标)?
- 简述垃圾回收算法:标记清除,标记整理清除,复制算法,分代收集算法。
- GC 分类:MinorGC、MajorGC、FullGC?
- 对象如何进入老年代?
- 简述 stop-the-word (简写为STW)?
- 垃圾回收器列举及原理简述?
- Serial收集器
- ParNew 收集器
- Parallel(串行) Scavenge(清除)收集器(jdk8 默认)
- Serial Old收集器
- Parallel Old收集器
- CMS 收集器 Concurrent Mark Sweep 并发 标记 清除(重点)
- G1收集器 Garage-First (因设计了Region的垃圾优先原理)(重点)
G1 收集器问题:
11. G1 如何实现可预测的停顿?
12. 什么是region?
13. 如何避免全区扫描?Remembered Set
14. 什么是OopMap?
15. humongous区?
16. 如何选择收集器?
三、虚拟机性能监控与故障处理工具
- 常用命令:jsp、jstat、jinfo、jmap、jstack、jhat
- 专业分析工具:Eclipse Memory Analyzer
- jvisualvm.exe 性能监控工具
- jconsole.exe 监视和管理控制台
四、类文件结构和类加载过程
- class类文件结构?
- 字节码指令简介?
- 指令列表为什么会是有两个 monitorexit 呢?
- 类加载器?
- 类加载过程?
- 类加载时机?
- 双亲委派模型,工作 原理和好处?破坏双亲委派模型的实例?
- java中创建对象的5种方式?
- java对象创建过程。
五、java内存模型和线程
- java内存模型结构?
- java内存模型中用到的指令列表?
答案参考:点我