Java内存区域与内存溢出异常

2023-11-12

Java内存区域与内存溢出异常


如上图所示,首先java源代码文件(.java后缀)会被java编译器编译为字节码文件(.class后缀)然后再让类加载器加载各个类的字节码文件,加载完毕后,交由JVM执行引擎执行。在整个执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段控件一般称之为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。

Java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则会依赖用户的线程的启动和结束而建立和销毁。


上述中方法区和堆是所有线程共享的数据区

上述的其他三个区是线程隔离数据区。

 

程序计数器:是一块较小的内存空间,他可以是看作是当前线程所执行的字节码的行数指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一个需要执行的字节码指令。由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此为了线程切换后能恢复到正确的执行位置,每个线程都需要一个独立的程序计数器,各线程之间计数器互不影响,独立存储。

如果线程执行时一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令内存。执行的是native方法,这个计数器则为空。次内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

 

虚拟机栈:java虚拟机栈也是线程私有的,他的生命周期和线程相同。虚拟机栈描述的是java方法执行的内存模型:每个方法在执行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直到执行完毕,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

该区域规定了两个异常情况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,如果扩展是无法申请到足够多的内存,就会抛出OutOfMemoryError异常。

 

本地方法栈:本地方法栈与虚拟机栈所发挥的作用非常类似,区别在于虚拟机栈为虚拟机执行java方法服务,而本地方法栈则为虚拟机使用到的native方法服务。

该区域规定了两个异常情况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,如果扩展是无法申请到足够多的内存,就会抛出OutOfMemoryError异常。

 

Java堆:对于大多数应用来说,java堆是java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域。所有的对象实例和数组都在堆上分配。堆是垃圾回收机制主要的区域,因此很多时候也被称之为GC堆,由于现在的垃圾回收机制所以java堆中还可以细分为:新生代和老年代。

Java堆可以处于物理上不连续的内存空间中,只要逻辑上的连续即可。如果在堆中没有内存完成实例分配,并且对也无法在扩展,将会抛出OutOfMemoryError异常。

 

方法区:方法区与java堆一样,是各个线程所共享的内存区域,他是用来存储已被虚拟机加载的类信息、常量、静态变量等一些。

当方法区无法满足内存分配要求的时候,将抛出OutOfMemoryError异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java内存区域与内存溢出异常 的相关文章

随机推荐

  • atx860和java_捷安特XTC800和ATX860有什么区别

    展开全部 区别比较大 简单说 ATX 8xx就是e69da5e887aa62616964757a686964616f31333431353237ATX 6xx的 局部升级 轮组由26寸换为27 5寸 车架外观改进 变速套件等级略微提高 仅此
  • mmclassification 训练自定义数据

    1 mmclassification 安装 如果环境已安装mmclassification 请跳过该步骤 mmclassification框架安装与调试验证请参考博客 mmclassification安装与调试 Coding的叶子的博客 C
  • STM32基于IIC协议的温湿度(AHT20)采集

    STM32基于IIC协议的温湿度 AHT20 采集 文章目录 STM32基于IIC协议的温湿度 AHT20 采集 1 IIC总线协议 1 1 什么是IIC协议 1 2 IIC协议的物理层和协议层 1 2 1 物理层 1 2 2 协议层 1
  • orm模型的查询方法集合

    目录 3 4 1 基本查询 3 4 2过滤查询 3 4 2 2 模糊查询 3 4 2 3 空查询 3 4 2 4 范围查询 3 4 2 5 比较查询 3 4 2 6 日期查询 3 4 3 1 F对象 3 4 3 2 Q对象 values 返
  • Aborted (core dumped) Assertion `Engine.getNbBindings() == 4' failed.

    记录一次特别粗心的错误 错误代码位置 assert的作用是现计算表达式 expression 如果其值为假 即为0 那么它先向stderr打印一条出错信息 然后通过调用 abort 来终止程序运行 需要 inputname 3 output
  • 垂直广告是什么意思_网上常看到带货这个词,那么带货到底是什么意思?又要怎么通过平台带货呢?...

    网上常看到带货这个词 那么带货到底是什么意思 又要怎么通过平台带货呢 直播带货就是通过短视频平台 吸引消费者来购买自己所售卖的产品 可以投放广告或是与达人合作进行带货 短视频 品牌营销优势 新一代广告宠儿 5G时代即将来临 人们越来越习惯且
  • HTML5----FormData实例用法

    ajax 异步上传文件 1 前言 在网页与后台的交互中 用的最多的网络交互方式之一就是ajax ajax 是免刷新页面就能从进行post与get方式的提交表单和获取服务端数据 但是在原先的ajax中 是不能携带文件上传的 但是由于h5里面的
  • Mysql数据库手册

    数据库基本概念 1 数据库 就是数据的仓库 由表 关系 操作对象组成 2 表 由行和列组成 数据都存放在表中 由于mysql是关系数据库 所以表又被称为关系 3 字段 就是属性 4 记录 一行数据就是一条记录 也是一条实体 需要设置主键 5
  • 基于惯性动作捕捉技术进行快速动画制作教程

    长久以来动画制作流程上有着诸多不可回避的问题 尤其在于角色动画的制作周期和动画效果方面 一般来说 每一秒钟的角色动画都需要动画师手动关键帧制作耗费8小时才能完成 也就是说 一个动画师每个月只能制作出22秒动画 动作捕捉技术为动画制作者带来福
  • Elasticsearch-基本命令

    基本命令 创建索引 添加数据 删除数据 简单查询 复杂查询1 复杂查询2 获得所有index 获得所有mapping type 根据某个字段精确查找 api的分组查询 bool查询 创建索引 put http localhost 9200
  • LSTM生成文本(字符级别)

    20200817 引言 在网上看到过一些利用深度学习来生成文本的文章 不管生成宋词也好 生成小说也好 各种各样 都是利用深度学习的模型来生成新的东西 之前的时候 我也一直觉得 他们这种生成方式 应该就是记忆性的东西 他并没有真正的从语义的角
  • jdbc导出mysql数据库_原生JDBC方式导出MySQL数据库

    现在的应用系统越来越多的都是业务系统与数据库系统是分离的 这里就会涉及到数据库备份的问题 如果业务系统与数据库是在同一服务器 可以很简单的用mysql自带的命令 mysqldump databases dbName gt dbNameBak
  • stm32 mqtt 如何判断心跳包发送成功_Dubbo 现有心跳方案总结以及改进建议

    1 前言 设计一个好的心跳机制并不是一件容易的事 就我所熟知的几个 RPC 框架 它们的心跳机制可以说大相径庭 这篇文章我将探讨一下如何设计一个优雅的心跳机制 主要从 Dubbo 的现有方案以及一个改进方案来做分析 2 预备知识 因为后续我
  • linux的inode暴增

    author skate time 2012 04 26 linux的inode暴增 今天刚到公司 接收到一个报警短信 一个数据库的inode使用率达到99 root DBtmp df h Filesystem Size Used Avai
  • 我 JS 写的好好的,为什么要用那么复杂的 TS

    今年前端面试有个很有意思的现象 最经典的 JavaScript 基础类面试题 不在被面试官宠幸 原因很简单 现在市场经济收紧 公司的项目决策中往往切割掉了边角试错成本 而 TypeScript 无疑更适合构建大项目和管理 就像 Java 和
  • 彻底理解embedding

    本文转载自https blog csdn net weixin 42078618 article details 84553940 版权问题请联系博主删除 首先 我们有一个one hot编码的概念 假设 我们中文 一共只有10个字 只是假设
  • 毕业设计记录-Pytorch学习-自己手写数字识别

    今天用之前的模型训练手写数字数据集 训练了50轮 效果如下 然后我就准备用自己手写的数字来检验看看 模型的准确率 自己找的一些数字图片 但是经过测试全部预测成3 很不解 搞了好几个小时 到最后无意间看到他的数据集的时候才知道哪出了问题 这是
  • Linux网络服务部署yum仓库

    目录 1 Yum概述 2 Yum实现过程 3 Yum配置文件 3 1yum主配置文件 etc yum conf 3 2仓库设置文件 etc yum repos d repo 4 yum命令详解 5 源地址 6 搭建仓库的方式 6 1搭建本地
  • MVC,MVP和MVVM架构解析

    文章目录 关于架构 框架和设计模式三者的说明 一 MVC 1 概念 2 结构 3 模式 4 优缺点 5 适用场景 二 MVP 1 概念 2 结构 3 与MVC对比 4 优缺点 5 适用场景 三 MVVM 1 结构 2 解析 3 MVVM架构
  • Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 如上图所示 首先java源代码文件 java后缀 会被java编译器编译为字节码文件 class后缀 然后再让类加载器加载各个类的字节码文件 加载完毕后 交由JVM执行引擎执行 在整个执行过程中 JVM会用一