【JAVA 虚拟机的内存模型】
1.这个话题其实被很多人写过了,但是也会被很多人继续写下去,我就是其中一个。 2.JVM的内存划分其实并不是一样的,因为每个虚拟机,每个版本都会有一定的改动。本文讨论的是HotSpot虚拟机的内存模型(JAVA虚拟机的一个版本)。 以上就是JVM的内存结构。 一个一个来说。 首先提两个概念:线程私有和线程共享。这个指的是在多线程的环境下,如果一个线程的某些资源只能是自己访问,其他线程不可访问,那么就是线程私有,相反,如果所有线程共享某份资源就是线程共享。 (1)程序计数器,(Program Counter Register)。这个在机组里面其实有很到位的解释,当然了这里其实和机组里面的是差不多的。因为JVM主要是解释字节码的,所以这个计数器的作用就是标识当前线程解释到了哪一行字节码,通过改变这个计数器的值来让程序不断地执行。这块内存肯定是线程私有的,因为每个线程解释到的位置是不尽相同的,所以这个具有线程的特殊性,必须线程私有。 (2)JAVA虚拟机栈(JAVA Virtual Machine Stacks)。虚拟机栈其实是描述JAVA方法执行的内存模型,这个很好理解,比如当前线程里面有很多函数执行,那么这些函数需要压栈,出栈等。这些操作都是在这个虚拟机栈里完成的。这个也是线程私有的。 (3)本地方法栈。(Native Method Stack)。这个其实是为了本地方法而设置的栈