要求
结合一段 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 缺点
代码说明