一、java虚拟机内存模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30353203/article/details/84145179

1、程序计数器,是一块很小的内存空间。由于java是支持线程的语言,当线程数量超过CPU数量时,线程之间根据时间片轮询抢夺CPU资源。每一个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令。各个线程的计数器互不影响,独立工作。是一块线程私有的内存空间。(如果当前线程正在执行一个java方法,则程序计数器记录正在执行的java字节码地址,如果当前线程正在执行Native方法,则程序计数器为空)

2、java虚拟机栈,是线程的私有的内存空间,它和java线程在同一时间创建,它保存方法的局部变量、部分结果,并参与方法的调用和返回。如果线程在计算过程中,请求的栈深度大于最大可用的栈深度,则抛出StackOverflowError ,如果java栈可以动态扩展,而在扩展栈的过程中,没有足够的内存空间来支持栈的扩展,则抛出OutOfMemoryError。

3、本地方法栈,和java虚拟机栈的功能相似,java虚拟机栈用于管理java函数的调用,而本地方法栈用于管理本地方法的调用。本地方法并不是用java实现的,而是使用c实现的。在SUN的Hot Spot虚拟机中,不区分本地方法栈和虚拟机栈。因此,和虚拟机栈一样,也会抛出StackOverflowError 和OutOfMemoryError。

4、

猜你喜欢

转载自blog.csdn.net/qq_30353203/article/details/84145179