驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
JVM内存结构:线程独有部分
/  

JVM内存结构:线程独有部分

开篇

JVM内存结构

左边是线程共享的部分:方法区和堆

右边是线程独有的部分:虚拟机栈,本地方法栈,线程计数器

栈负责管理运行,堆负责管理存储

线程独有的部分

线程计数器

CPU每一个核心在同一时间只能执行1个操作,而多个任务是通过时间片在1个核心上轮流执行的。即:CPU要进行线程上下文切换,线程计数器的作用就是记录每个线程在被切换时候的工作状态,当拥有时间片的时候,下一步执行的任务。

虚拟机栈(JVM Stack)

我们通常谈及引用对象的时候会区分 堆和栈 的概念,对于引用对象而言其真正的存储是在堆中,栈只保留了指向堆的引用。

那么这里的栈指的就是虚拟机栈,更准确的讲是栈帧局部变量表

需要注意如下几点:

  • 每个方法调用都会创建一个stack frame(栈帧)
  • 声明周期同线程一致,每个方法从调用开始到结束代表着一个栈帧入栈到出栈的过程。
  • 栈帧组成:局部变量表(基本数据类型+指向堆的对象引用)、操作数栈、动态链接、方法出口(返回)等组成。

如下图所示:

栈的结构

本地方法栈(Native Method Stack)

虚拟机栈同虚拟机栈相同,不过其针对的是本地方法(Native)

总结下:JVM中叫做栈,Java中叫做方法。

骐骥一跃,不能十步。驽马十驾,功在不舍。