根据《java虚拟机规范(第二版)》的规定,java虚拟机所管理的内存将会如下图所示的数据区域。我会根据深入java虚拟机总结一下各个分区。
1.程序计数器
程序计数器是一块较小的内存空间,作用为当前线程所执行的字节码的行号指示器。由于java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的,在任何一个时间内一个处理器只会执行一个独立的线程中的指令。每条线程都需要一个独立的程序计数器,各个计数器之间互不影响,这块内存区域属于线程私有的内存。
如果线程执行的是一个java方法,该线程的计数器记录的是正在执行的虚拟机字节码指令;如果正在执行的是native方法,计数器则为空,这个空不是null,而是undefined。程序计数器是在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
注:
(1)线程与进程的区别:
a.进程:操作系统都支持同时运行多个任务,一个任务通常就是指一个程序,每个运行中的程序就是一个进程。
b.线程:当一个程序运行的时候,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程。
(2)Native方法: