码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA - JVM - 运行时区域

时间:2018-07-24 17:43:25      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:font   nbsp   静态变量   分区   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 - 运行时区域

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!