JVM_01_Java内存区域

本文详细介绍了Java内存的各个区域,包括程序计数器、虚拟机栈、本地方法栈、Java堆和方法区,以及它们各自的作用、存储内容和可能抛出的异常。此外,还提及了直接内存,并分析了可能导致的OutOfMemoryError。这些内容对于理解Java内存管理和线程行为至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

线程私有

  • 程序计术器(内存空间较小):

    存储内容:当前线程所执行的字节码的行号指令器,用来取下一条要执行的字节码指令。线程执行java方法,计数器记录正在执行的虚拟机字节码;本地方法则为空。
    注:不会发生OutOfMemoryError

  • 虚拟机栈(线程的内存模型):

    在这里插入图片描述

    存储内容:如图所示,特别说明,局部变量表存储的编译可知的Java基本类型(int、float等)、对象引用(reference)、returnAddress类型(指向一条字码指令的地址);
    reference的特别说明:指向对象的引用,如图所示,目前有两种方式访问,一个是句柄池,一个是直接指针
    异常:StackOverflowError(线程请求的栈的深度大于虚拟机所允许深度);OutOfMemoryError(栈动态扩展时没有申请到足够的内存)

  • 本地方法栈:与虚拟机栈类似,区别是虚拟机栈为java方法服务,本地方法为非java方法服务

线程共享

  • Java堆:
    存储内容:对象实例及数组
    异常:OutOfMemoryError(堆没有完成实例分配并且堆不能扩展时)
    :java堆的实现可以时固定大小,也可以是可扩展(参数-Xmx和-Xms)
  • 方法区:
    在这里插入图片描述
    存储内容:已经被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码缓存等
    异常:OutOfMemoryError(方法区无法满足新的内存分配需求时)【运行时常量区同类】
    :此区内存回收的主要目的时针对常量池加和对类型的卸载

直接内存

存储内容:非虚拟机定义的内存,
异常:OutOfMemoryError(直接内存+java虚拟机运行时内存 > 物理内存)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值