剑指JVM-虚拟机实践与性能
· 2 min read
#auth/尚硅谷教育
第2章 运行时数据区及线程概述
存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM在程序执行期间把它所管理的内存分为若干个不同的数据区域。这些不同的数据区域可以分为两种类型:一种是在JVM启动时创建,仅在JVM退出时才被销毁,这种可以理解为线程共享的,另外一种数据区是针对每个线程的,是在创建线程时创建的,并在线程退出时销毁,这种可以理解为线程私有的。本章将从线程的角度出发讲述JVM内存区域的划分。
2.1 运行时数据区
概述JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。 不同的JVM在内存的划分方式和管理机制方面存在着部分差异。 下文将结合Java虚拟机规范,来探讨一下经典的JVM内存布局。 如图2-1所示, 运行时数据区可简单分为 Native Method Stack(本地方法栈)、 Program Counter Register(程序计数器)、 Java Virtual Machine Stack(虚拟机栈)、 Heap(堆区)和 Method Area(方法区)。
JVM内存详细布局如图2-2所示, 其中虚拟机栈是以栈帧为基本单位构成的,栈帧包括局部变量表、操作数栈、动态链接、方法返回地址和一些附加信息。 堆区分为Young区(新生代)、Old区(老年代),这里讲解的是基于“经典分代”的HotSpot虚拟机内存布局。 方法区分为常量池、方法元信息、klass类元信息。