一、前言
Java 虚拟机,简称 JVM(Java Virtual Machine),是 Java 语言中最为核心的一个东西,Java 程序运行离不开它,因为它的存在,使得 Java 拥有“一次编译,多次运行”的特点。任何平台只要装有针对于该平台的 Java 虚拟机,字节码文件(.class)就可以在该平台上运行。
JVM 是 Java 中最难以理解、而且非常重要的知识点,也常常用来衡量一个人 Java 基本功是否牢靠,更是在面试中被问及最多、最频繁的知识点之一。本文将从 Java 虚拟机内存模型开始入手,一步步来了解它。
Java 虚拟机内存模型是 Java 程序运行的基础,为了使 Java 应用程序正常运行,JVM 将其内存数据分为程序计数器、虚拟机栈、本地方法栈、堆和方法区,如下图所示:
(在 JDK1.8 开始,已经去掉了方法区的概念,用元空间(Metaspace)进行了代替.)
程序计数器用于存放下一条运行的指令;虚拟机栈和本地方法栈用于存放函数方法调用堆栈信息;Java 堆用于存放 Java 程序运行时所需的对象等数据;方法区用于存放程序的元数据信息。
其中,一部分是线程私有的,而另一部分却是线程共享的。
-
线程私有:程序计数器、虚拟机栈、本地方法栈
-
线程共享:堆、方法区
</