Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里,下面是JVM内存结构图:
JVM(Java虚拟机)的内存结构可以分为以下几个主要组成部分:
-
方法区(Method Area):存储类的结构信息,如类的字段、方法、构造函数等。它也被称为永久代(Permanent Generation)或元空间(Metaspace)。
-
堆(Heap):存储对象实例。在堆中分配的内存可以通过垃圾回收进行管理和释放。堆可以分为几个不同的区域,如新生代(Young Generation)和老年代(Old Generation)。
-
新生代包括伊甸园区(Eden Space)和幸存者区(Survivor Spaces)。对象首先分配在伊甸园区,然后根据其存活时间被移动到幸存者区。
-
幸存者区又分为幸存者区S0(From)和幸存者区S1(To)。当进行垃圾回收时,存活的对象会被从一个幸存者区复制到另一个幸存者区,以便为下一次垃圾回收做准备。
-
老年代存储较长时间存活的对象。通常情况下,老年代的对象比新生代的对象更大。
-
-
栈(Stack):存储方法调用的信息,包括局部变量、操作数栈和方法调用的状态。每个线程都有一个独立的栈。
-
本地方法栈(Native Method Stack):类似于栈,但用于执行本地方法(Native Method)。
-
程序计数器(Program Counter):记录当前线程执行的字节码指令的地址。