栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Java虚拟机运行时数据区

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java虚拟机运行时数据区

jvm运行时数据区分为:

1.方法区: 属于共享区域, 存储已被虚拟机加载得类信息,常量静态变量

2.虚拟机栈: 线程私有,与线程生命周期一样每个方法被执行得时候java虚拟机会创建一个栈帧,栈帧包括局部变量表,方法返回地址,动态链接等信息,为java方法服务

3.本地方法栈: 为native方法服务(实体实现语言非java)

4. 堆: jvm所管理得内存中最大得一块(后面会详细讲解)

5. 程序计数器: 空间小,运行快,线程私有,其中存储着需要执行指令得字节码指令

PC寄存器
  • 每个线程独立私有,存储着字节指令地址,在同一时刻,一条java虚拟机线程只会执行一个线程方法代码,这个正在被执行的方法被称为该线程当前方法. 如果不是native方法,那么pc寄存器就保存虚拟机正在执行的字节码指令地址,如果是native方法,那么pc寄存器存储的就是undefined. pc寄存器最小容量应该能存储一个returnAddress的数据
  • ReturnAddress类型
    •  returnAddress 类型的值就是指向特定指令内存地址的指针,列如程序计数器pc中的值
    • returnAddress 类型在 Java 语言之中并不存在相应的类型,也无法在程序运行期间更改
    • returnAddress 类型的值。

Java虚拟机
  • 每条线程创建时,java虚拟机栈中会创建一个相对应的栈,用来存储栈帧(栈帧存储局部变量表,操作数栈,动态链接,方法出口等信息)
  • java虚拟机规范规定java虚拟机栈可以被设定为固定大小或者根据计算机动态扩展或者收缩

堆(Heap)
  • java虚拟机所管理的内存最大的一块区域,线程共享,类实例和数组对象分配的区域
  • 垃圾收集器管理的主要区域
  • 容量可以固定大小,也可以进行动态扩展和收缩

 

方法区
  • 可被各条线程共享
  • 可不连续,容量可固定,也可动态扩展和收缩
  • 存储了每个类的结构信息,如运行时常量池,构造函数和普通方法的字节内容等
  • 运行时常量池
    • 每个运行时常量池都分配在Java虚拟机的方法去之中,在类和接口被加载到虚拟机后,对应的运行时常量池就会被创建出来.
    • 具有动态性,
    • 避免频繁创建和销毁对象影响系统性能

 

本地方法栈
  • native方法指的是Java以外的其他语言编写的方法
  • 容量可以固定大小,也可以进行动态扩展和收缩
  • 如果java虚拟机不支持native方法,也不需要传统方法栈,可以不创建本地方法栈;如果支持本地方法栈,那么这个栈一般会在线程创建的时候按线程分配
  • java虚拟机实现可能会用到传统的栈来执行native方法,这个栈就是本地方法栈

 

  • 当一个方法调用native方法时,由java虚拟机栈中的java方法栈帧调用,native栈帧接收
  • 栈帧
    • 用来存储数据和部分过程的结果的数据结构
    • 百度百科经典解释:"栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构."
    • 栈帧随着方法调用而创建,随着方法结束而销毁--无论方法是正常完成还是异常完成,都算结束.
    • 栈帧容量仅仅取决去java虚拟机的实现和方法调用时可被分配的内存
    • 栈帧是线程本地的私有数据,不可能在一个栈帧之中引用另一个栈帧

 个人笔记以及总结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/277066.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号