JVM内存结构图解

JVM内存图解

 

从上图我们可以发现,静态变量存放在方法区中,并且是被所有线程所共享的。这里要说一下java堆,java堆存放的就是我们创建的一个个实例变量。

  1. 堆区

存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

  1. 本地方法栈区

1、每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

2、每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

3、栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)

  1. 方法区

1、又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的classstatic变量。

2、方法区中包含的都是在整个程序中永远唯一的元素,如classstatic变量。

  1. PC寄存器(程序计数器)

用于记录当前线程运行时的位置,每一个线程都有一个独立的程序计数器,线程的阻塞、恢复、挂起等一系列操作都需要程序计数器的参与,因此必须是线程私有的。

  1. Java虚拟机栈

在创建线程时创建的,用来存储栈帧,因此也是线程私有的。Java程序中的方法在执行时,会创建一个栈帧,用于存储方法运行时产生的临时数据和中间结果,包括局部变量表、操作数栈、动态链接、方法出口等信息。这些栈帧就存储在栈中。如果栈深度大于虚拟机允许的最大深度,则跑出StackOverFlowError异常

相关文章:

  • 2021-04-12
  • 2021-12-25
  • 2021-08-03
  • 2021-04-04
  • 2021-12-30
  • 2021-06-28
猜你喜欢
  • 2021-07-16
  • 2021-05-18
  • 2021-12-07
  • 2021-07-10
  • 2021-09-23
  • 2021-08-18
  • 2021-06-20
相关资源
相似解决方案