JVM与内存有着密不可分的关系,内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。
栈内存区可以被分为虚拟机栈和本地栈内存栈。虚拟机栈执行的是 Java 方法,本地方法栈执行的是本地方法。虚拟机会为每个线程分配一个虚拟机栈,每个虚拟机栈中都有若干个栈帧,每个栈帧中存储了局部变量表、操作数栈、动态链接、返回地址等。一个栈帧就对应 Java 代码中的一个方法,当线程执行到一个方法时,就代表这个方法对应的栈帧已经进入虚拟机栈并且处于栈顶的位置,每一个 Java 方法从被调用到执行结束,就对应了一个栈帧从入栈到出栈的过程。
堆内存主要用于存放对象(或实例)和数组,它是JVM管理的内存中最大的一块区域,堆内存和方法区都被所有线程共享,在虚拟机启动时创建。
方法区内存主要用于存储虚拟机加载的类信息、常量、静态变量,以及编译器编译后的代码等数据。JDK1.8 中,已经不存在方法区,替代它的是一块空间叫做 “ 元空间 ”,元空间并不在虚拟机中,而是使用本地内存,元空间的大小仅受本地内存限制,但可以通过 MetaspaceSize 和 MaxMetaspaceSize 来指定元空间的大小。
程序计数器是一块非常小的内存空间,可以看做是当前线程执行字节码的行号指示器,每个线程都有一个独立的程序计数器,因此程序计数器是线程私有的一块空间,此外,程序计数器是Java虚拟机规定的唯一不会发生内存溢出的区域。
JVM底层原理
最新推荐文章于 2025-08-05 17:34:52 发布