java内存模型(JMM)

1.运行时数据区域

   

程序计数器:

         占一块较小的内存空间

         作用:当前线程所执行字节码的行号指示器

          【每条线程都需要有一个独立的程序计数器,这类内存区域是线程私有的】

            若执行的是java方法:计数器记录的是正在执行的虚拟机字节码指令地址

            若执行的是Native方法:计数器值为空

            这块内存区域是唯一一个没有规定任何OutOfMermoryError的区域

虚拟机栈:

          它描述的是java方法执行的内存模型

          每个方法被执行时都会同时创建一个栈帧,每一个方法被调用的过程对应着一个栈帧在虚拟机中从入栈到出栈的过程

        由图可知,java虚拟机栈也是线程私有的

         注:当进入一个方法时,这个方法需要在帧中分配多大的局部空间变量是完全确定的,在方法运行期间不会改变局部变量表的大小。

         此块区域存在的异常有:StackOverflowError , OutOfMemoryError

本地方法栈:

         与虚拟机栈发挥的作用非常相似

         区别:虚拟机栈执行java方法,而本地方法栈执行native方法

堆:

         被所有线程“共享”的一块内存区域,在虚拟机启动时创建,几乎所有的对象实例以及数组都要在堆上分配内存

          且java堆可以于物理上不连续的内存空间,当前主流虚拟机都是按照可扩展来实现的(通过-Xmx和-Xms控制)

方法区:

        是各个线程“共享”的内存区域(非堆)

         用于存储已被虚拟机加载的类信息、常量、静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载。

   

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值