java虚拟机内存模型是java程序运行的基础,为了能使Java应用程序正常运行,JVM虚拟机将内存数据分为程序计数器,虚拟机栈,本地方法栈,Java堆和方法区
程序计数器用于存放下一条运行的指令;虚拟机栈和本地方法栈用于存放函数调用堆栈信息;java堆用于存放Java程序运行时所需的对象等数据;方法区用于存放程序的类元数据信息
1.程序计数器
程序计数器是一块很小的内存空间,由于线程之间根据时间片轮询抢夺CPU资源,每一个线程必须用一个独立的程序计数器,用于记录下一条要执行的命令。如果当前线程正在执行一个java方法,程序计数器记录正在执行的java字节码地址,如果当前线程正在执行一个Native方法,程序计数器为空。
2.java虚拟机栈
java虚拟机栈也是线程私有的内存空间,它和java线程同一时间创建,保存方法的局部变量,部分结果,参与方法的调用和返回。
在java虚拟机规范中,定义了两种异常和占空间有关,
StackOverflowError