• JVM学习——5—— JVM 运行时内存结构


    图解

    本章节多结合图解

    在这里插入图片描述

    细化
    在这里插入图片描述

    一、方法区(共享)

    在这里插入图片描述

    方法区是一个抽象的概念,在JDK1.8之前的实现是Perm Space,JDK1.8及之后的实现是Meta Space.
    方法区被所有线程所共享,方法区里装 class的结构

    1.1 Perm Space 永久区

    1. 字符串常量位于PermSpace永久区
    2. FGC ( 老年代垃圾回收 ) 不会清理

    区分 Perm Space 和 Meta Space:
    结合GC, 一直创建字符串常量,观察 堆 大小变化
    如果FGC了或者堆大小变大。则是1.8+,则是 MetaSpace,否则是Perm Space

    1. 大小启动的时候指定,不能变

    1.2 Meta Space 元数据区

    1. 字符串常量位于堆
    2. 会触发FGC清理
    3. 大小不设定的话,最大就是物理内存,如果指定大小,满了就会触发FGC清理

    2.0 运行时常量池 Run-Time Constant Pool

    放置 .class文件的常量池里的内容

    二、堆 Heap(共享)

    在这里插入图片描述

    堆在线程之前共享。

    三、虚拟机栈 JVM Stack

    在这里插入图片描述
    在这里插入图片描述

    虚拟机栈用来执行Java方法 , 每个线程对应一个栈;
    栈里包括frame (栈帧) ; 每个方法对应一个栈帧
    栈帧用来存储数据、执行动态连接

    1. 局部变量表 Local Variable Table
    • 静态方法 0 位置依次是入参,然后才是局部变量
    • 非静态方法 0 位置是this,依次是入参,然后才是局部变量
    1. 操作数栈 Operand Stack
    2. 动态连接 dynamic Linging
      连接到.class文件的常量池,如果引用没有解析就给解析
    3. 返回地址
      a()->b() 方法a调用了方法b,b方法的返回后的地址

    四、本地方法栈 Native Method Stack

    在这里插入图片描述

    等同于java自身的栈,不过是C/C++写的本地方法栈 JNI 本地方法接口 java native interface

    五、程序计数器 Program Counter Register

    在这里插入图片描述

    程序计数器PC : 存放指令的位置

    虚拟机运行
    while not end:
    	取program count中的位置,找到对应的指令
    	执行该指令
    	Program count ++
    
    • 1
    • 2
    • 3
    • 4
    • 5

    六、直接内存 Direct Memory

    在这里插入图片描述

    JVM可以直接访问的内核空间的内存,由操作系统管理;NIO相关,提高效率,零拷贝,

  • 相关阅读:
    Stimulsoft Reports.WPF 2022.4.3 Crack
    【FreeSwitch开发实践】外呼线路电话收不到回铃音问题的解决
    面试理论篇二
    GitHub Pages 站点建设
    [Hive] 常见函数
    霸榜双11!科技创新助力九牧卫浴赢战全渠道
    人工神经网络与神经网络,人工神经网络入门书籍
    【第七篇】- Maven 插件
    一键批量按比例修改视频尺寸:视频剪辑软件使用技巧
    ssl/tls 自签证书
  • 原文地址:https://blog.csdn.net/niTaoTaoa/article/details/126283455