JVM内存结构及简单介绍

文章目录

      • 内存结构图
      • 类装载器(Class Loader)
      • 方法区(Method Area)
      • 堆(Heap)
      • 虚拟机栈(JVM Stack)
      • 本地方法栈(Native Method Stack)
      • 程序计数器(Program Counter Register)
      • 执行引擎(Execution Engine)
      • 本地方法接口(Native Interface)

内存结构图

JVM内存结构及简单介绍_第1张图片

类装载器(Class Loader)

类加载器的作用是负责将类的字节代码加载到 Java 虚拟机中

方法区(Method Area)

方法区是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量常量以及编译器编译后的代码等。

堆(Heap)

堆内存也是被线程共享的区域。用来存放由new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。

虚拟机栈(JVM Stack)

虚拟机栈是线程私有区域,栈的内存要远远小于堆内存,栈实际上是一个队列, 遵循 FILO的原则(后进先出),主要存放对象的引用函数体的地址函数的参数局部变量临时变量等。

本地方法栈(Native Method Stack)

本地方法栈是线程私有区域,主要是为虚拟机使用到的 Native 方法服务,任何本地方法接口都会使用某种本地方法栈。当线程调用Java方法时,虚拟机会创建一个新的栈帧并压入Java栈。然而当它调用的是本地方法时,虚拟机会保持Java栈不变,不再在线程的Java栈中压入新的帧,虚拟机只是简单地动态连接并直接调用指定的本地方法。

程序计数器(Program Counter Register)

程序计数器是线程私有的区域,是用于存放执行指令的地方。
每个线程都有自己的程序计数器这样当线程执行切换的时候就可以在上次执行的基础上继续执行,仅仅从一条线程线性执行的角度而言,代码是一条一条的往下执行的,这个时候就是程序计数器;JVM就是通过读取程序计数器的值来决定下一条需要执行的字节码指令,进而进行选择语句、循环、异常处理等。

执行引擎(Execution Engine)

通过类装载器装载的,被分配到JVM的运行时数据区的字节码会被执行引擎执行
JVM中的执行引擎在执行java代码的时候,一般有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择。

本地方法接口(Native Interface)

JAVA代码调用非JAVA代码之间的接口。
一个Native Method是一个Java方法:该方法的实现由非Java语言实现,比如C。

后续会对每一项做详细的分析。

你可能感兴趣的:(JVM从入门到入土,jvm,java)