jvm内存模型

主要分为栈,堆,方法区,程序计数器

1.程序计数器

2.栈(stack

①虚拟机栈:每个线程独生成一个栈,线程中每调用一个方法生成一个栈帧,栈帧依次压栈

                栈帧中存放了每个方法的基本数据变量,对象的引用,操作指令,出口信息等

②本地方法栈:存放的是native方法(其他语言写的),其他和虚拟机栈一样

可能出现的异常如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError(栈溢出异常,单线程递归容易出现,个人觉得叫栈帧溢出比较好);

                            如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError(内存溢出异常,多线程递归的时候容易出现)

栈的优点:a.访问速度比堆快,仅次于cpu的寄存器

       劣势:只有单个stack的数据可以共享

3.堆(heap)

        jvm中最大的一块内存,线程共享的,存放对象实例,不被引用的对象,会被GC清理,释放内存

可能出现的异常:OutOfMemoryError

4.方法区(method)

       和堆一样被所有线程共享,存放了所有class ,static变量,final变量,存放着程序中唯一



还有主内存和工作内存










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值