Java运行时数据区域

一、程序计数器(Program Counter Register)

  1. 一块较小的内存空间,可看做是当前线程所执行的字节码的行号指示器。
  2. 在java多线程中,每条线程都有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储。(线程私有的内存)
  3. 如果线程执行的是java方法,则程序计数器记录的是正在执行的虚拟机字节码指令的地址;如果线程执行的是Native方法,这个计数器值则为空。
  4. 该内存区域是java虚拟机规范中唯一没有规定OutOfMemoryError情况的区域。

二、虚拟机栈(VM Stack)

  1. 描述Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(用于存储局部变量表、操作树栈、动态链接、方法出口等信息)
  2. 每一个方法被调用直至执行完成,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。
  3. 局部变量表:基本数据类型、对象引用(可能是指向对象起始地址的引用指针、可能是指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址);该表所需的内存空间在编译期间完成分配,在运行期间不改变。
  4. 64位的long和double类型会占用2个局部变量空间(Slot),其余基本数据类型占用1个。
  5. 该区域引起的两个异常:一是如果线程请求的栈深度大于虚拟机所允许的深度,将跑出StackOverflowError异常;一是如果虚拟机栈可以动态扩展,当扩展时无法申请到足够的内存时会抛出OutOfMemoryError异常

三、本地方法栈(Native Method Stacks)

  1. 同虚拟机栈类似,当本地方法栈是为虚拟机使用到的Native方法服务。
  2. 有些虚拟机(如 Sun HotSpot虚拟机)直接将本地方法栈和虚拟机栈合二为一。
  3. 同样会抛出StackOverflowError和OutOfMemoryError异常。

四、堆(Heap,GC Heap)

  1. 被所有线程所共享,在虚拟机启动时就被创建。
  2. 唯一目的:存放对象实例,几乎所有的对象实例和数组都在堆上分配(现在不绝对,因为JIT编译器的发展和逃逸分析技术的成熟)。
  3. 可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB).
  4. 可处在物理上不连续的内存空间中,只要逻辑上是连续的就行。
  5. 堆无法再扩展时,跑出OutOfMemoryError异常。

五、方法区(Method Area)

  1. 被所有线程所共享,在虚拟机启动时被创建。
  2. 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
  3. 有时候被称为“永久代”。
  4. 当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

六、运行时常量池(Runtime Constant Pool)

  1. 方法区的一部分。
  2. Class文件中有类的版本、字段、方法、接口、常量池等信息,其中常量池用于存储编译器后生成的各种字面量和符号引用,这部分内容将在类载入后存放到运行时常量池。
  3. 可在运行时将新的常量加入常量池中,如String的intern()方法。
  4. 当常量池无法再申请到内存时会抛出OutOfMemoryError异常。

七、直接内存(Direct Memory)

  1. 并不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域,但是这部分内存也被频繁使用。
  2. JDK1.4中加入的NIO类,引入一种基于通道(Channel)与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值