JVM内存模型

提示:文章写完后,目录在这里插入代码片可以自动生成,如何生成可参考右边的帮助文档


JVM内存模型分析

java虚拟机在运行java程序的时候,会将内存划分为5个不同的内存空间,每个内存空间存放不同的数据,这5个区域也叫作运行时数据区,接下来将会介绍五个内存空间。
运行时数据区


一、程序计算器

  • 程序计数器的内存空间最小,它是字节码指令的行号指示器。
  • 如果程序运行的是java方法,则程序计算器记录的是正在执行字节码指令的地址;如果程序运行的是native方法,则程序计算器为空。因为native方法是java的作用域达不到的,没有在字节码文件中。
  • 程序计算器是5个内存空间中唯一一个不会出现OutOfMemoryerror(OOM)异常的内存空间。
  • 程序计数器是线程私有的

二、方法区

  • 用来存储被虚拟机加载的类信息、常量、静态变量和即时编译的代码块
  • 线程共享

三、虚拟机栈

  • 线程私有
  • 每个方法执行的时候都会创建一个栈帧,栈帧用于存储局部变量表、操作数栈、动态链接、出口地址等信息
  • 方法请求的栈深度超过虚拟机所允许的栈深度,将会报stackOverflow错误
  • 如果虚拟机栈可以扩展深度,如果不能再申请足够的内存则将会报OOM异常

四、本地方法栈

  • 其功能和虚拟机栈类似,区别在于虚拟机栈为虚拟机的java方法服务,而本地方法栈是为了给虚拟机的本地(navie)方法服务(即用C++或C语言写的方法)。
  • 其同样可能会产生栈溢出和内存溢出的问题
  • 线程私有

五、堆

  • 内存中最大的一块,几乎所有的实例对象和数组都在堆上分配
  • 线程共享

六、补充

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值