一.JVM基本结构
其实基本结构与之前类似,只是JDK1.8取消了之前的“永久代”,取而代之的是“元空间”——Metaspace,两者本质是一样的。“永久代”使用的是JVM的堆内存,而“元空间”是直接使用的本机物理内存。
二.如果判断一个对象可以被回收
2.1 引用计数算法
维护一个计数器,如果有对该对象的引用,计数器+1,反之-1。无法解决循环引用的问题
2.2 可达性分析算法
从一组名为“GC Roots”的根节点对象出发,向下遍历。那些没有被遍历到、与GC Roots形成通路的对象,会被标记为“回收”
三.哪些对象可以作为GC Roots
**虚拟机栈(栈帧中的局部变量)**中引用的对象
本地方法栈(native)中引用的对象
方法区中常量引用的对象
方法区中类静态属性引用的对象