JVM-006-运行时数据区

2020-11-15  本文已影响0人  Docker_Compose

一、运行时数据区

 运行时数据区是由6个部分组成的Method Area 方法区、VM Stacts 虚拟机栈、Native Method Stacts 本地方法栈、Heap 堆、Program Counter Register 程序计算器,Direct Memory 直接内存。了解他们,能够更好的理解Java程序在JVM中是如何运行的。

1、Program Counter Register

 程序计数器。线程私有。存放指令的位置。
 简单的来说,CPU切换线程时,记录该线程执行的指令的位置。



2、Direct Memory

  直接内存
JVM可以直接访问kernel空间的内存(os 管理的内存)



3、Native Method Stacts

 本地方法栈。线程私有。
 JVM能够调用C或C++写的方法。此区域无法调优。



4、VM Stacts

 虚拟机栈。线程私有。
 VM Stacts有一个比较重要的概念,Frame 栈帧。每一个方法对应着一个Frame。
 那么,这个Frame里有什么?

(1)Frame

 Frame也有四个部分组成Local Variable Table、Operand Stack、Dynamic Linking、return address
 接下来,了解一下它们吧。

1. Local Variable Table

 局部变量表。

2. Operand Stack

 操作数栈。

3. Dynamic Linking

 动态链接。
 方法a调用了方法b,方法b存放在运行时常量池中,方法a到运行时常量池找到方法b,这个就被称作Dynamic Linking。

4. return address

 方法a调用了方法b, b方法的返回值放在什么地方



5、Method Area

 方法区。
 JDK v1.8之前,该区域的实现者是Perm Space。字符串常量位于PermSpace。FGC不会清理。大小启动的时候指定,不能变。
 JDK v1.8之后,该区域的实现者是Meta Space。字符串常量位于堆。会触发FGC清理。不设定的话,最大就是物理内存。



6、Heap

 堆。




常见的指令集

  1. store
  2. load
  3. pop
  4. mul
  5. sub
  6. invoke
上一篇 下一篇

猜你喜欢

热点阅读