java程序设计语言+java虚拟机+java api类库统称为jdk,jdk为java开发的最小环境。java api类库中的se子集+java虚拟机统称为JRE,JRE为java运行时的标准环境。
程序计数器:
java虚拟机(jvm)在程序运行过程中,会将它所管理的内存划分为若干个不同的数据区域,这些区域有些随着jvm的启动而创建,有些随着用户线程的启动和结束而创建和销毁。一个基本jvm运行时内存模型如下:

注意:上图展示的是java se7的虚拟机规范;java的虚拟机规范并不是一成不变的,oracle在发布新的jvm版本时,可能会对jvm作一定的优化和改进,例如jdk8中,方法区被移出,取而代之的是元数据空间(metaspace)。
1,什么是程序计数器?
程序计数器是java虚拟机记录当前线程所执行字节码的行号指示器。
java代码编译后的字节码在未经过JIT(实时编译器)编译之前,其执行方式是通过"字节码解释器"进行解释执行的。简单的工作原理为:解释器读取装入内存的字节码,按照顺序读取字节码指令,读取一个指令之后,将该指令翻译成固定的操作,并根据这些操作进行分支、循环、跳转等流程。
从上面的描述中可能会产生程序计数器是否多余的疑问,因为在java虚拟机中,沿着指令的顺序执行下去,跳转到指定的指令处按顺序继续执行是完全能够保证程序的执行顺序的,假设程序永远只有一个线程,这样的疑问没任何问题。也就是说并不需要程序计数器,但实际上程序是通过多线程协作执行的。
首先我们要搞清楚jvm的多线程执行方式:jvm的多线程是通过时间片轮询(即线程轮流切换并分配处理器时间)也就是说某个线程在执行过程中,极有可能因时间片耗尽而挂起,而另一个线程得到时间片开始执行。当被挂起的线程重新获得时间片要从被挂起的地方继续执行,就需要知道上次执行到哪个位置。在jvm

本文介绍了Java内存管理中的程序计数器和堆内存。程序计数器用于记录线程执行的字节码行号,具有隔离性和在多线程执行中的重要角色。堆内存是Java虚拟机中最大的一块内存,用于存储对象实例,被垃圾收集器管理,当内存不足且无法扩展时会导致`OutOfMemoryError`异常。堆内存可通过-Xms和-Xmx设置大小,新生代和老生代的划分有助于内存分配。Java对象访问通常通过栈中的对象引用完成。
214

被折叠的 条评论
为什么被折叠?



