• JVM 运行时数据区域


    一、程序计数器

    可以看成当前线程执行的字节码的行号指示器。

    如果当前线程正在执行Java方法,指向的是正在执行的虚拟机字节码指令的地址。如果正在执行的是Native方法,其值为空。

    此内存区域不存在OutOfMemoryError异常。

    二、Java虚拟机栈

    当前线程特有,周期与线程一致。

    虚拟机栈是Java方法执行的内存模型,每个方法执行的同时会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。方法执行对应着栈帧从虚拟机栈入栈到出栈的过程。

    三、本地方法栈

    本地方法栈是为虚拟机使用到的本地方法(Native方法)服务的。

    以上都是线程隔离的数据区


    四、Java堆

    被所有线程共享,存放对象实例。

    五、方法区

    被所有线程共享,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据。又称为”非堆”。

    六、运行时常量池

    运行时常量池是方法区的一部分。

    常量池用于存放编译生成各种字面量和符合引用。在类加载后进入到运行时常量池中存放。

    七、直接内存

    虚拟机之外的内存,在NIO中,频繁使用的内存,使用DirectByteBuffer对象直接引用,减少Java对和直接内存之间的复制数据。

    以上运行时数据区域使用下图来示意:

    image

  • 相关阅读:
    个人不断学习的真正起因(值得收藏)——北漂18年(24)
    IPython基础使用_Round2
    IPython基础使用_Round2
    Mysql 创建查询用户
    8.11.3 Concurrent Inserts 并发插入:
    8.11.2 Table Locking Issues 表锁发生
    8.11.1 Internal Locking Methods
    Oracle timestamp
    报表引擎API开发入门— EJB程序数据源
    8.10.3 The MySQL Query Cache
  • 原文地址:https://www.cnblogs.com/javabeginer/p/7210302.html
Copyright © 2020-2023  润新知