通常聊JVM内存模型都是把图截出来,而后对着图,解释上面堆、栈之类的概念。这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为何是这个样子,再也不死记硬背。算法
编程的本质是什么,有这么一句话,程序=算法+数据结构。
这里的"算法"其实至关宽泛,而平时理解的算法是指诸如排序、查找等操做,相对狭隘。因此换一个解释,咱们把算法解释为对数据执行操做,简称执行。
这样,程序的本质即是数据+执行。
而JVM做为JAVA程序的执行载体,必然从逻辑上与其相对应。编程
所以,JVM内存模型能够分为这么两部分:数据区、执行区。
数组
任何程序,不管实现语言,它的数据老是可分为两类:元数据和业务数据。数据结构
执行部分,首先咱们得理解程序执行的基本单位是什么,是方法(或称函数)。
一般的程序入口是main方法,单元测试也是基于方法。
平时交流时,也会说调下这个对象的方法,而不是调下这个对象。
甚至还有专门的函数式编程。
而在Java中,方法分为两种:Java方法和Native方法
在内存模型中,Java方法对应Java虚拟机栈(Java Virtual Machine Stacks),Native方法对应本地方法栈(Native Method Stack)
书中解释以下:jvm
本地方法栈为虚拟机使用Native方法服务。
除此以外,再加上程序计数器(Program Counter Register),为当前线程所执行的字节码的提供行号指示。
主要的内存模型就画出来了。
其中,数据区是通用的,因此线程共有,而执行区是线程执行本身的,因此线程私有。函数式编程
再加上真正去执行程序的执行引擎,连接本地方法库,JVM内存模型就很好理解了。
对比下书上的结构,逻辑上一致。
以上。函数
《深刻理解Java虚拟机》单元测试