JVM的内存区域结构如下
内存区域大概可分为方法区,堆,虚拟机栈,本地方法栈,程序计数器,还会有直接内存(虚拟机对内存之外,但属于及其内存的一块区域)
上述中虚拟机栈,本地方法栈,程序计数器是线程私有的
程序计数器:
例如有A,B两个线程,两个线程需要自己记录具体执行到哪一行代码,这条代码执行完了,需要使用程序计数器指向下一条需要执行的代码。有了程序计数器,两个线程就知道自己应该做什么,以及下一步应该做什么,不会互相影响。
虚拟机栈:
线程在执行的过程不可避免要在方法之间跳转,虚拟机栈就是用来记录线程需要执行那些方法。
虚拟机栈是由栈帧组成的,一个栈帧对应一个方法调用,一个方法调用完就会从虚拟机栈中出栈
跟程序计数器的道理是一样的,虚拟机栈会决定线程自己的方法调用路径。
本地方法栈:
跟虚拟机栈差不多,只不过本地方法栈的作用对象是native方法
网友评论