gball个人知识库
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)

ggball

后端界的小学生
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)
  • 面试

  • 数据库

  • linux

  • node

  • tensorFlow

  • 基础组件

  • 基础知识

    • java集合

    • jvm调优

      • JVM大纲
      • 类加载器
      • JVM入门
      • java内存模型
      • java运行时数据区
        • 指令集分类
        • Runtime Data Area
        • 常用指令
      • 05_GC and Tuning
      • java对象内存布局
      • jvm垃圾收集器和内存分配策略
    • java并发编程

    • java网络编程

    • java8新特性

    • javaAgent

    • java高级

  • 算法与设计模式

  • 分布式

  • 疑难杂症

  • go学习之旅

  • 极客时间

  • 知识库
  • 基础知识
  • jvm调优
ggball
2021-10-08

java运行时数据区

# Runtime Data Area and Instruction Set

jvms 2.4 2.5

# 指令集分类

  1. 基于寄存器的指令集
  2. 基于栈的指令集 Hotspot中的Local Variable Table = JVM中的寄存器

# Runtime Data Area

PC 程序计数器

存放指令位置

虚拟机的运行,类似于这样的循环:

while( not end ) {

​ 取PC中的位置,找到对应位置的指令;

​ 执行该指令;

​ PC ++;

}

JVM Stack

  1. Frame - 每个方法对应一个栈帧
    1. Local Variable Table
    2. Operand Stack 对于long的处理(store and load),多数虚拟机的实现都是原子的 jls 17.7,没必要加volatile
    3. Dynamic Linking https://blog.csdn.net/qq_41813060/article/details/88379473 jvms 2.6.3
    4. return address a() -> b(),方法a调用了方法b, b方法的返回值放在什么地方

Heap

Method Area

  1. Perm Space (<1.8) 字符串常量位于PermSpace FGC不会清理 大小启动的时候指定,不能变
  2. Meta Space (>=1.8) 字符串常量位于堆 会触发FGC清理 不设定的话,最大就是物理内存

Runtime Constant Pool

Native Method Stack

Direct Memory

image-20210405122311545

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

NIO , 提高效率,实现zero copy

思考:

如何证明1.7字符串常量位于Perm,而1.8位于Heap?

提示:结合GC, 一直创建字符串常量,观察堆,和Metaspace

# 常用指令

静态语句块初始化

调用构造方法

store 弹栈操作

load 压栈操作

pop 将值弹到栈顶位置 (Pop the top value from the operand stack.)

mul

sub

invoke

  1. InvokeStatic
  2. InvokeVirtual
  3. InvokeInterface
  4. InovkeSpecial 可以直接定位,不需要多态的方法 private 方法 , 构造方法
  5. InvokeDynamic JVM最难的指令 lambda表达式或者反射或者其他动态语言scala kotlin,或者CGLib ASM,动态产生的class,会用到的指令

image-20210405151204316

注意:非静态方法的局部变量表,首个局部变量是this

上次更新: 2025/06/04, 15:06:15
java内存模型
05_GC and Tuning

← java内存模型 05_GC and Tuning→

最近更新
01
AIIDE
03-07
02
githubActionCICD实战
03-07
03
windows安装Deep-Live-Cam教程
08-11
更多文章>
Theme by Vdoing
总访问量 次 | 总访客数 人
| Copyright © 2021-2025 ggball | 赣ICP备2021008769号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×

评论

  • 评论 ssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
×