版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26917447/article/details/83026233
- jvm区域分布
总共分为5个区域,分别是方法区,虚拟机栈,本地方法栈,堆和程序计数器。
每当JVM执行java程序的过程中都会将它所管理的内存划分为这5个数据区域也叫运行时数据区域。 - 方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。JVM规范将它描述为堆的逻辑部分, 但它还有个别名叫Non-heap。
- 虚拟机栈是线程私有的,它的生命周期与线程相同。常说的java内存中堆与栈里面的栈就是虚拟机栈,准确的说虚拟机栈里的局部变量表的这部分。因为是局部变量表存放着各种基本数据类型,对象引用等。每一个方法被执行的时候都会创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息。每个被调用直到执行结束的方法都对应一个栈帧在虚拟机栈从入栈到出栈的过程。
- 堆是所有线程共享的一块内存区域,在JVM启动时创建。该区域的唯一目的就是存放对象实例,几乎所有对象实例都在这里分配内存。JVM规范对于堆的描述是所有对象实例和数据都要在堆上分配。
- 程序计数器是一块较小的内存空间,它的作用是当前线程执行的字节码的行号指示器。为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存储。