为什么JVM将线程的程序计数器划分在堆区域

提问如题,有点不明白的是:
线程的程序计数器目的是为记录当前线程调用方法的执行位置。

栈中存储的对象需要满足2个特点:1.占用内存小;2.线程私有
堆中存储的对象需要满足2个特点:1.共享;2.数据结构复杂,占用的内存多大

按照我理解,线程的程序计数器占用内存小,而且是线程私有的,也不需要共享给其他线程,理应在栈中存储,希望大家来探讨下,或是大牛来解释下

1、运行时可分为如下内存区域:方法区、虚拟机栈、本地方法栈、堆、程序计数器
2、堆区并不是完全共享,也可以划分线程独立的缓冲区。
3、程序计数器是独立的内存区域

我的理解是
程序计数器是单独的一块,独立于堆和栈
《Inside the Java Virtual Machine 2nd Edition》 作者:Bill Venners

程序计数器又不是jvm的范畴,而是属于计算机体系结构中寄存器范畴,不能用于存储其他运算数据。jvm的书籍上把程序计数器放进来,应该是说在执行java程序时,有用到程序计数器。而并不是说jvm像管理堆、栈那样管理程序计数器。

用堆栈保存数据,我觉得应该还有一个条件:
递归,或者调用结束即释放。

计数器的话貌似不符合这个条件。