美文网首页
JVM-006-运行时数据区

JVM-006-运行时数据区

作者: Docker_Compose | 来源:发表于2020-11-15 17:17 被阅读0次

一、运行时数据区

 运行时数据区是由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
  • InvokeStatic
  • InvokeVirtual
  • InvokeInterface
  • InovkeSpecial:
     可以直接定位,不需要多态的方法
     private 方法 , 构造方法
  • InvokeDynamic:
     JVM最难的指令
     lambda表达式或者反射或者其他动态语言scala kotlin,或者CGLib ASM,动态产生的class,会用到的指令

相关文章

  • JVM-006-运行时数据区

    一、运行时数据区  运行时数据区是由6个部分组成的Method Area 方法区、VM Stacts 虚...

  • 《深入理解Java虚拟机-JVM高级特性与最佳实践》学习总结(第

    一、运行时数据区 JVM将我们机器上的内存当做一个运行时数据区来进行处理。该运行时数据区包括以下几个部分: 方法区...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • 《深入java虚拟机》-内存区域与内存溢出异常

    一、运行时数据区域 1. java内存区模型 注 :1. 绿色方框的数据区由所有线程共享2. 运行时数据区的白色区...

  • jvm 运行时数据区-01

    jvm 运行时数据区 jvm 运行时数据区 ,将内存划分为5个区域,java 代码在运行时 类里面的 组成部分 分...

  • JVM Run-Time Data Areas & 参数相关

    jvm定义了各个运行时数据区: 运行时数据区: <=== 是一个规范,内存结构是一个实现1)部分运行时数据区域是在...

  • JVM内存区域小结

    1. 运行时数据区(Runtime Data Area) 当类被加载入方法区时,就已经开始使用运行时数据区了。根据...

  • JVM学习笔记

    JVM 注意:0、JVM运行时数据区和JVM内存模型不要搞混1、运行时数据区可以分为:堆、方法区、虚拟机栈、本地方...

  • JVM

    jvm学习分为四部分 运行时数据区 类加载器 类加载过程 垃圾回收 本地接口 运行时数据区 (1)线程私有区: 程...

  • Java虚拟机02-JVM运行时数据区

    1 JVM运行时数据区 JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算...

网友评论

      本文标题:JVM-006-运行时数据区

      本文链接:https://www.haomeiwen.com/subject/cfjgbktx.html