JVM——六大内存划分

本文详细介绍了JVM的六大内存划分:程序计数器、本地方法栈、虚拟机栈、堆、方法区以及运行时常量池。每个部分都有其特定功能,如程序计数器记录字节码执行位置,本地方法栈服务于本地方法,虚拟机栈处理方法执行,堆存储对象实例,方法区存储类信息,运行时常量池存放字面量和符号引用。这些内存区域在不同情况下可能引发StackOverflowError或OutOfMemoryError异常。
摘要由CSDN通过智能技术生成

程序私有内存

每个线程都有,彼此之间完全隔离

1、程序计数器

程序计数器是六块内存中比较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器

若当前线程执行的是java方法,计数器记录的是正在执行的JVM字节码指令地址
若当前线程执行的是Native方法,计数器值为空

程序计数器是唯一一块不会产生OOM异常的区域

2、本地方法栈

本地方法(native方法)执行的内存模型

HotSpot虚拟机中,本地方法栈与虚拟机栈是同一块内存区域

3、虚拟机栈

虚拟机栈描述Java方法执行的内存模型

每个方法执行的同时都会创建一个栈帧存储局部变量表、操作数栈、方法出口等信息
每个方法从调用直到执行完毕的过程,对应一个栈帧在虚拟机栈的入栈与出栈过程

生命周期与线程相同:在创建线程同时创建此线程的虚拟机栈,线程执行结束,虚拟机栈与线程一同被回收

此区域会产生两种异常:
1)若线程请求的栈深度大于JVM允许的深度(-Xss设置栈容量),抛出StackOverFlowError异常(单线程)
2)虚拟机在进行栈的动态扩展时,若无法申请到足够内存,抛出OOM(OutOfMemoryError)异常(多线程)

程序共享内存

所有线程共享此内存空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值