JAVA – JVM – 运行时区域

此页面是否是列表页或首页?未找到合适正文内容。

JAVA – JVM – 运行时区域

标签:fontnbsp静态变量分区strong内容style常量池运行时

本章内容

  本章介绍,JVM运行过程中是怎样划分区域的,堆,栈,方法区,这些是什么鬼?每个区域存储哪些内容?

区域介绍

  程序计数器

  虚拟机栈

  本地方法栈

  堆

  方法区

本章已Hotspot为例,虚拟机栈和本地方法栈,是合并的

程序计数器(线程私有)

  1 作用 存储程序当前执行指令的地址

  2 注意 JVM规定当调用native方法时,程序计数器的值是空,非native方法时,保存的是当前需要执行的指令地址

虚拟机栈(线程私有)

  1 作用 每个方法执行时,都会创建一个栈帧来存储当前运行时的数据

  2 存储内容

    2.1 局部变量表 方法中的局部变量(方法中声明的非静态变量以及函数形参) 基本数据变量(存储值) 引用数据变量(引用-一般指向堆)

    2.2 操作数栈

    2.3 执行运行时常量池的引用

    2.4 方法返回地址

    2.5 附加信息

堆(线程共享)

  1 作用 对象实例数据的存储(主要是对象)

方法区(线程共享)

  1 作用 存储类加载后的相关信息

  2 存储内容

    2.1 类的信息(类的名称,方法信息,字段信息)

    2.2 静态变量

    2.3 常量以及编译器编译后的代码

思考

  1 Class对象的使用场景?为什么类加载完成后要在堆中生成一个Class对象?

JAVA – JVM – 运行时区域

标签:fontnbsp静态变量分区strong内容style常量池运行时

原文地址:https://www.cnblogs.com/hpzhu/p/9360566.html

作者: 雨林木风

为您推荐

返回顶部