Java内存区域

news2024/11/29 2:37:10

目录复制

Java内存区域

    • 区域划分
    • 内存溢出异常

区域划分

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规格》的规定,Java虚拟机所管理的内存包括以下几个运行时数据区域。


在这里插入图片描述


线程独占的有:程序计数器,虚拟机栈,本地方法栈
线程共享的有:堆,方法区

[程序计数器]:程序计数器,是一块较小的内存空间,保存着当前线程执行的字节码位置,每个线程工作时都有独立的计数器,只为执行Java方法服务,执行Native方法时,程序计数器为空.。

[Java虚拟机栈]:Java虚拟机栈是线程私有的,生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:执行每个方法时都会同步创建一个栈帧(Stack Frame)用于存储局部遍历表、操作数栈,动态链接和方法出口等信息。

[本地方法栈]:与虚拟机栈发挥的作用相似,区别是虚拟栈为虚拟机执行Java方法服务,而本地方法栈为虚拟机执行本地(Native)方法服务。

[堆]:虚拟机管理的内存中最大的一块,几乎所有的对象实例以及数组都在堆上分配。从内存分配的角度来看,所有线程共享的堆中可以划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB)。

[方法区]:又称非堆区,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器优化后的代码缓存,动态生成的类等数据.1.7的永久代和1.8的元空间都是方法区的一种实现

HotSpot虚拟机中方法区的实现:
JDK 8之前,HotSpot虚拟机设计团队选择把分代设计扩展至方法区,及使用永久代(Permanent Generation)来实现方法区。
JDK8之后采用在本地内存(Native Memory)中实现的元空间(Meta-space)代替了永久代。

内容变更:
JDK 7 之前,永久代中存放的内容有:类信息,静态变量,常量,JIT编译器编译后的代码缓存等信息。
JDK7 时 ,原本存放在永久代中的 字符串常量池,静态变量等被移至Java堆中。
JDK8时,永久代剩余的内存(主要是类型信息)全部移到了元空间中。

内存溢出异常

  1. 程序计数器:唯一《Java虚拟机规范》中内体育规定任何OutOfMemoryError 的区域。
  2. 虚拟机栈:当线程请求的栈深度大于虚拟机栈允许的深度时,将抛出StackOverflowError异常;如果虚拟机容量可以动态扩展,当栈扩展时无法申请到足够的内存会抛出OutOfMemoryError异常。
  3. 本地方法栈:与虚拟机栈一样,本地方法栈在栈深度溢出或栈扩展失败时分别抛出 StackOverflowError 和 OutOfMemoryErro 异常
  4. 堆:当Java堆中没有足够内存完成实例分配,并且堆无法再扩展时,会抛出 OutOfMemoryError异常
  5. 方法区:如果方法区无法满足新的内存分配需求时,将抛出OutOfMemoryError异常。

直接内存:直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域,但由于总内存有限,当各个内存区域的总和大于物理内存时,会导致动态扩展时出现OutOfMemoryError异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《web课程设计》 基于HTML+CSS+JavaScript实现中国水墨风的小学学校网站模板(6个网页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

[附源码]SSM计算机毕业设计网上零食商城JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Spring | 一文带你掌握IOC技术

👑 博主简介:    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区:BoBooY(优质编程学习笔记社区) 文章目录IOC 控制反转1、概念2、分析…

无线传感器网络:传输层

文章目录Challenges for Transport LayerEnd-to-End MeasuresApplication-Dependent OperationEnergy ConsumptionConstrained Routing/AddressingBiased ImplementationReliable Multi-Segment Transport (RMST) ProtocolPump Slowly, Fetch Quickly (PSFQ) ProtocolPump Oper…

超详细的PHP入门知识点讲解

目录 一、简介 二、php基本语法 二、变量和作用域 三、常量 四、数据类型 五、运算符 六、流程控制 七、超全局变量 一、简介 基础知识: 需要一定的html和css的语法知识 基本概念: PHP(超文本预处理器)是一种通用开源脚本…

汽车销量数据库(分车型、分品牌月度销量数据 2005-2021)

1、数据来源:汽车工业协会 2、时间跨度:2005年1月-2021年5月 3、区域范围:全国 4、指标说明: 该份数据包含全国各种汽车销量数十个相关指标! 该份数据包含如下指标: 轿车:一汽大众、上海大…

TMS Sphinx Alexandria Full Source

TMS Sphinx Alexandria Full Source 用于身份访问管理的TMS Sphinx Delphi框架,包括授权和身份验证。 TMS Sphinx允许您为多个应用程序实现单点登录(SSO):web、本机、移动或机器到机器API通信。它可用于通过登录表单、类似的用户界面和基于服务的身份验证…

「低代码」跑通现代BI“最后一公里”的背后

文|智能相对论 作者|沈浪 “未来不懂低代码就和二十年前不会用word一样。未来80%的应用会由业务人员通过低代码开发。”在2022云栖大会上,阿里云智能总裁张建锋对低代码的发展前景依旧保持着非常积极的态度。 无独有偶,微软中国CTO韦青在他的专栏《万…

100天精通Python(数据分析篇)——第66天:Pandas透视表基础+实战案例(pivot_table函数)

文章目录每篇前言一、透视表基础参数说明实战案例0. 导入Excel数据1. data2. index3. values4. columns5. aggfunc6. fill_value7. dropna8. margins9. margins_name10. observed11. sort每篇前言 🏆🏆作者介绍:Python领域优质创作者、华为云…

linux dolphin为tags协议服务的进程意外退出,kioslave5已经意外关闭

刚开始用archlinux的使用的是dolphin感觉还是挺好用的。不过最近不知道为什么dolphin每次打开都会弹出个错误,很影响效率和心情。我简单的搜索报错代码,也没有成功解决报错。于是打算重新安装一个文件管理器做替换。 现象 运行dolphin或者运行浏览器中…

在PyCharm快速加载第三方模块的设置方法

在《小白学Python》慕课中说明了多种加载第三方模块的方法,这里补充一个在PyCharm中更为方便设置国内镜像源加载的方法。 因为默认情况下,PyCharm是加载国外网站的模块资源,因此常常会因为网络不稳定导致加载失败。因此,可以设置…

基于JAVA的学校图书管理系统(Swing+GUI)

目 录 第1章 绪论 1 1.1系统开发背景和意义 1 1.2系统可行性研究 1 1.3系统开发目标 2 1.4开发平台、运行环境 2 第2章 相关技术概述 3 2.1Java语言简介 3 2.2 Sqllite技术简介 4 2.3 Swing技术简介 5 第3章 需求分析 6 3.1 设计目标 6 3.2 功能分析 6 3.2.1 用户管理 6 3.2.2 …

深度学习day01

Marchine leariing 机器学习就是自动找函式 告诉机器要找的函式用 Supervised Learning 函式的Loss ——评价函式的好坏 Reinforcement就是让机器自己下象棋,输赢自己尝试,没像监督学习那样有人为规定 给函式寻找范围: 函式寻找方法——…

基于STM32实现USB组合设备CDC+MSC正确打开方式

摘要: 前一段时间对无刷电机的驱动有了兴趣,移植了odrive和simpleFOC代码,里面有关于stm32实现USB复合的实例,最近也有打算在electronbot里实现U盘通讯来实现bootloader和语音文件的拷贝和管理。看了网上也有相关实现文章&#x…

【mysql是怎样运行的】-客户端与服务器连接

文章目录1. 几种连接方式1.1 TCP/IP1.2 命名管道和共享内存1.3 UNIX 域套接字2. 服务器处理客户端请求2.1 连接管理2.2 解析与优化2.3 存储引擎1. 几种连接方式 1.1 TCP/IP 数据库服务器进程和客户端进程可能运行在不同的主机中,它们之间必须通过网络进行通信。My…

韩国研究人员开发交通信号控制新算法

由Keemin Sohn教授领导的韩国中央大学的研究小组提出了一种用于交通信号控制的元RL模型。具体来说,该团队开发了一个扩展的深度Q网络(EDQN)结合的基于上下文的元RL模型,用于交通信号控制。传统的交通信号控制器通常无法处理交通拥…

Echarts画散点图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Echarts画散点图前言一、散点图悬浮框鼠标移入可滚动操作二、散点图偏下方的点悬浮数据显示不全三、数据量大、数据类别多、数据重复点多造成散点图散点展示不全或展示散点出…

操作系统基础教程——第六章课后答案

1.思考题 (6)什么是临界区?什么是临界资源?什么是竞争条件? 临界区:访问临界资源的程序段(代码)。 临界资源:并发进程中共享变量所代表的资源;一次只能供一个进程使用的资源。 …

【机器学习知识点】【1】二维与三维空间梯度下降微分求解及可视化展示

【机器学习知识点】系列文章主要介绍机器学习的相关技巧及知识点,欢迎点赞,关注共同学习交流。 本文主要介绍了机器学习中梯度下降的数学微分求解方法及其可视化。 目录1. 二维空间的梯度下降求解及可视化1.1 二维空间梯度求解1.2二维空间梯度可视化2. 三…

灰色关联度分析-详细代码和说明

1、数据来源:自主计算 2、时间跨度:无 3、区域范围:无 4、指标说明: 因素分析的基本方法过去采用的主要是统计的方法,如回归分析,回归分析虽然是一种较通用的方法,但大都只用于少因素的、线…