要求
结合一段 java 代码的执行理解内存划分

说明
会发生内存溢出的区域
方法区、永久代、元空间

从这张图学到三点

从这张图可以学到
要求
堆内存,按大小设置

解释:
堆内存,按比例设置

解释:
元空间内存设置

解释:
注意:
代码缓存内存设置

解释:
线程内存设置

官方参考文档
要求
三种垃圾回收算法
标记清除法

解释:
要点:
标记整理法

解释:
特点:
标记复制法

解释:
特点:
GC 与分代回收算法
GC 的目的在于实现无用对象内存自动释放,减少内存碎片、加快分配速度
GC 要点:
分代回收









GC 规模
三色标记
即用三种颜色记录对象的标记状态





并发漏标问题
比较先进的垃圾回收器都支持并发标记,即在标记过程中,用户线程仍然能工作。但这样带来一个新的问题,如果用户线程修改了对象引用,那么就存在漏标问题。例如:




因此对于并发标记而言,必须解决漏标问题,也就是要记录标记过程中的变化。有两种解决方法:
垃圾回收器 - Parallel GC
垃圾回收器 - ConcurrentMarkSweep GC
垃圾回收器 - G1 GC
G1 回收阶段 - 新生代回收







G1 回收阶段 - 并发标记与混合收集





要求
典型情况
要求
类加载过程的三个阶段
<cinit> 方法,在初始化时被调用验证手段
jhsdb.exe hsdb 打开它的图形界面scanoops 起始地址 结束地址 对象类型 可以根据类型查找某个区间内的对象地址inspect 地址 指令能够查看这个地址对应的对象详情代码说明
jdk 8 的类加载器
名称 | 加载哪的类 | 说明 |
|---|---|---|
Bootstrap ClassLoader | JAVA_HOME/jre/lib | 无法直接访问 |
Extension ClassLoader | JAVA_HOME/jre/lib/ext | 上级为 Bootstrap,显示为 null |
Application ClassLoader | classpath | 上级为 Extension |
自定义类加载器 | 自定义 | 上级为 Application |
双亲委派机制
所谓的双亲委派,就是指优先委派上级类加载器进行加载,如果上级类加载器
双亲委派的目的有两点
对双亲委派的误解
下面面试题的回答是错误的

错在哪了?
代码说明
要求
强引用

软引用(SoftReference)

弱引用(WeakReference)

虚引用(PhantomReference)

代码说明
要求
finalize
finalize 原理


finalize 缺点
代码说明