程序计数器
programCounterRegister
这个是来自于java中的概念,设计出来只为java服务的。
1、它是干嘛的呢?
本质上是java虚拟机中的一个数据区域,代表着程序当前正在执行指令的那一行,
当前线程所执行的字节码的行号指示器。
存在的意义是协助java虚拟机读取字节码文件的一个辅助性功能的内存区域,也就是字节码解释器工作时就是通过改变这个计数器的值来选取下一条字节码指令,分支,循环,跳转,异常处理,线程恢复都需要依赖这个计数器
2、它的值分为两种?
一种是一串内存地址,记录的是字节码文件中java方法对应的地址,因为是你设计出来的,不同的人地址千变万化,所以需要记录一下;
另一种是null,就是java里的native方法对应的,
所以这个内存区域是唯一一个在java虚拟机中不会出现OutOfMemoryError的区域。因为产生地址的这个方法,是java虚拟机本身自带的,文件能编译运行就一定会有地址。
3、它有什么需要注意的地方?
(1)是线程私有的
我认为互联网火起来,是因为全球化,需要信息共享,所以“网页”这种东西应运而生。
java很火是因为它被设计出来可以作为网页这种东西的后台,支撑同一个时间很多人去访问网页获取信息,为什么能支撑,因为它里面有线程的概念,
程序对于,每个用户的访问处理到反馈结果,这个过程是平行互不干扰的。
在这一刻,你存1000,他也用你的程序存1000,你们的账户都会加1000,但是你们是不同的线程,
java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,技术上还是分开处理的(多核也是一样的)
4、其他?
---------------------------------------------------------
需要注意的地方是,为啥这个计数器要线程私有,因为这样设计比较合理,符合事实规律
java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,
多核处理器的一个内核
一个时刻只会运行一条线程中的指令,
-------------------------------------------------------------------------
java的多线程本来就是设计的为了应付现实中,这个程序同时被很多人去访问,并能够分别处理记录反馈不同人的运行结果,并发意味着各个用户执行程序是平行互不干扰的,逻辑关系上的互相干扰那是结果另一个角度,不是过程。
我认为java被广泛运用在网页上,是因为它可以应对同一时间多个人访问程序,而它可以在内部去创造多个线程,而这些线程分别记录了这些人的结果,并回馈回去;能够很好的应对这种情况,至于虚拟机的可移植性那个是火的顺带原因。在这之前应该是没有哪个语言可以比java更好的弄出来。
所以程序计数器为什么是线程私有的,这个问题没啥意义,本来就是结合现实中多并发和根据平行世界的概念去设计语言的



