JVM 内存结构基础

问:简单说说 Java 的 JVM 内存结构分为哪几个部分?

答:JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分,分别解释如下:

  • 虚拟机栈:线程私有的,每个方法在执行时会创建一个栈帧,用来存储局部变量表、操作数栈、动态连接、方法返回地址等;其中局部变量表用于存放 8 种基本数据类型(boolean、byte、char、short、int、float、long、double)和 reference 类型。每个方法从调用到执行完毕对应一个栈帧在虚拟机栈中的入栈和出栈。

  • 堆:线程共享的,在虚拟机启动时创建,用于存放对象实例。

  • 方法区:线程共享的,用于存储已被虚拟机加载的类信息、常量、静态变量等。

  • 程序计数器:线程私有的,是当前线程所执行的字节码行号指示器,每个线程都有一个独立的程序计数器,字节码解释器工作时通过改变它的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复都依赖于它。

  • 本地方法栈:线程私有的,主要为虚拟机用到的 native 方法服务,与虚拟机栈类似。

问:简单说说堆和栈各自的特点?

答:

  • 栈是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。

  • 堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意的。

本文参考自 JVM 内存结构相关的几个基础题目解析

你可能感兴趣的:(JVM 内存结构基础)