Java内存区域与可能出现的异常

运行时数据区域

线程共享区域:堆,方法区,运行时常量池

线程私有区域:程序计数器,Java虚拟机栈,本地方法栈

程序计数器:

               程序计数器:内存空间比较小,可以看作当前线程所执行的字节码的行号指令集

               若当前线程正在执行的是一个Java方法,这个计数器记录的时正在执行的虚拟机字节码指令的地址

               若执行的是一个Native方法,这个计数器值为空

              程序计数器是线程私有的,每条线程都有其独立的程序计数器,

Java虚拟机栈:

                     Java虚拟机描述的是一个Java方法执行的内存模型,
                     每一个方法执行时都会创建一个栈帧用于存储局部变量表(8大基本数据类型,对象的引用),操作数栈,动态链接,方法出口等
                     每一个方法从调用到执行完成,都对应一个栈帧在虚拟机中入栈和出栈的过程
                     生命周期与线程相同
                     此区域会出现两种异常:StackOverflowError   、OutOfMemoryError(OOM)

本地方法栈:

                本地方法栈和Java虚拟机栈的作用完全相同,Java虚拟机栈为JVM执行的Java方法服务,本地方法栈为JVM所用的Native方法服务
                在HotSpot虚拟机中,Java虚拟机栈和本地方法栈在同一块内存区域

Java堆:

        是Java虚拟机管理的最大的内存区域,Java堆在JVM启动时创建,存放了数组、对象实例,是垃圾回收管理的主要区域
        可以处于物理上不连续的空间中,Java虚拟机在主流的虚拟机中都是可以扩展的
        若堆中无法完成对象的实例或堆无法拓展时,会出现OOM

方法区:

        用于存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译器编译后的代码等
        在JDK8以前的HotSpot虚拟机中,方法区也被称为“永久代”(JDK8被元空间取代)
        当方法区无法满足内存分配需求时,会出现OOM

运行时常量池:

                   运行时常量池是方法区的一部分,存放字面量(字符串(JDK1.7后移到堆中),final常量,基本数据类型)
                   符号引用(类和结构的完全限定名,字段的名称和描述符,方法的名称和描述符)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值