JVM内存模型之运行时数据区简介(初级篇)

JVM内存模型

一、JVM 1.8内存区域划分

在这里插入图片描述

1、程序计数器(线程私有)

每个线程都有自己的程序计数器,用于记录当前线程虚拟机字节码的指令地址,如果CPU切换,切换回来可以继续执行;如果当前线程是native方法,则为空。

2、虚拟机栈(线程私有)

java每启动一个线程,就会有自己的一个虚拟机栈,每个方法在执行的时候会创建一个栈帧,用于存放:

  • 局部变量表
  • 操作数栈
  • 动态链接
  • 方法返回地址

每个方法在执行开始到结束的过程,对应了栈帧在虚拟机栈的入栈和出栈的过程;
如果线程请求的虚拟机栈深度大于虚拟机所允许的最大深度则会抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,扩展到无法申请足够的内存,则会抛出OutOfMemoryError异常。

3、本地方法栈(线程私有)

执行的是native方法,当然也会抛出StackOverflowError和OutOfMemoryError异常。

4、 堆(线程共有)

这个区域存放的是对象实例,所有的对象实例以及数组都在堆上进行分配;jdk1.7版本以后,字符串常量从永久代中剥离出来,存放在堆中。该区域又分为年轻代和老年代,年轻代和老年代默认的比例是1:2,其中年轻代又分为Eden区、survivor0、survivor1区,默认比例是8:1:1。

5、方法区(元空间)

元空间取代了1.7版本及以前的永久代。

以上是对Jdk1.8的内存模型的简单介绍,如果有理解不对的地方,谢谢指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值