程序计数器、 虚拟机栈、 本地方法栈 3 个区域随线程而生,随线程而灭;因此在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 垃圾收集器所关注的是堆内存 # 确定对象状态(标记) # 引用计数算法 通过给对象添加引用计数器,记录对象被引用的状态,当引用数量为 0 时,该对象就处于不可再被使用状态。 COM(Component Object Model)技术、 ActionScript 3 的 FlashPlayer、Python 语言等都使用了引用计数算法进行内存管理。 该算法很难解决对象之间相互循环引用的问题。 # 可达性分析算法 #...

# 运行时数据区域 # 程序计数器(线程私有) 程序计数器:当前线程所执行的字节码的行号指示器(分支、 循环、 跳转、 异常处理、 线程恢复等基础功能)。 唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。 # Java 虚拟机栈(线程私有) 每个方法在被执行时虚拟机都会创建一个栈帧(Stack Frame)用于存储局部变量表、 操作数栈、 动态链接、 方法出口等信息。 局部变量表存放了编译期可知的各种基本数据类型(boolean、 byte、 char、 short、 int、float、 long、...