安卓面试总结(5)——Java 虚拟机 I
安卓面试总结(4)——Java 多线程II
上一篇写了多线程、锁机制的内容,写的不是很详细,需要配合一些知识来回顾,但是看完后应该会有一个大概了吧。接下来的 JVM 有点复杂,可能安卓也用不到,但是能够说清楚的话,面试还是有一定优势吧,至少肚子里有东西,不会慌,有利于提高信心。
一、运行时数据区域
又是别人的图啊,这个很简洁明了。
程序计算器
Java 虚拟机栈
本地方法栈:为本地方法服务
堆:
方法区:
运行时常量池:也是方法区的一部分
直接内存
二、垃圾收集 针对目标:堆和方法区,线程部分会随线程结束而消失(面试被问了,居然没记住)判断一个对象是否可被回收 可达性分析算法(JVM使用): 三、方法区的回收 方法区主要存放永久代对象(JDK1.8 后移到堆、内存),回收率低主要是对常量池的回收和卸载(为避免内存溢出,大量使用反射和动态代理 JVM 需要类卸载) 四、()
当一个对象可被回收时,() 会被执行,但有且只有一次(可以使用引用自救一次)
五、引用类型 六、垃圾收集算法 标记 - 清除 标记 - 整理 复制 分代收集 七、垃圾收集器
概述
CMS 收集器:以获得最短回收时间为目标的收集器
G1 收集器
收集器:单线程收集器,效率高
收集器: 的多线程版(新生代默认)
:多线程收集器,可控制吞吐量 停顿时间