java 内存作用_【深入JVM】JAVA内存区域以及作用

2023-11-03

Java虚拟机所管理的内存将会包括以下几个运行时数据区域

所有线程共享的区域:Java堆、方法区

线程私有的:程序计数器、Java虚拟机栈、

与对象内存分配关系最密切的内存区域是:堆内存、栈内存(虚拟机栈)

虚拟机中内存最大的一块:java堆

Java堆是垃圾收集管理器的主要区域,因此也被称作“GC堆“

8e293432fe0e516b3b6f4d59dead5f35.png

程序计数器:看作是当前线程所执行字节码的行号指示器,此内存区域是唯一一个在Java虚拟机规范中没有规定OutOfMemoryError情况的区域

Java虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型: 每个方法在执行都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程

StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度

OutOfMemoryError:如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存

本地方法栈:与虚拟机栈的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法服务,本地方法栈为虚拟机使用到的Native方法服务

Java堆:此区域存放对象实例,几乎所有的对象实例都在这里分配

从内存回收的角度:由于现在收集器基本都采用分代收集器,所以Java堆还可以细分为:新生代和老年代,再细致一点的有Eden空间、From Survivor空间、To Survivor空间

从内存分配的角度:线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(Thread  Local Allocation Buffer),进一步划分的目的是为了更好的回收内存或者更快的分配内存

方法区(Non-Heap 非堆):用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

方法区与永久代本质上并不等价,仅仅是因为HotSpot的设计团队选择把GC分代收集器扩展至方法区,或者说使用永久代来实现方法区,这样HotSpot的垃圾收集器可以像管理Java堆一样管理这部分内存,

能够省去专门为方法区编写内存管理代码的工作,对应i其他虚拟机是不存在永久代的概念

-XX:MaxPermSize :方法区的大小

已经发布的jdk1.7的HotSpot已经把放在永久代的字符串常量池移出(现在也有放弃永久代并逐步改为Native Memory来实现方法区的规划)

方法区特点:不需要连续的内存和可以选择固定大小或者可扩展 ;可以选择不实现垃圾回收

回收目标:针对常量池的回收和对类型的卸载

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

运行时常量池:用于存放编译期生成的各种字面量和符号引用,这部分在类加载进入方法区的运行时常量池

运行时常量池对class文件的特征:1>保存class文件中描述的符号引用和翻译出来的直接引用 2>具备动态性,运行期间也可能将新的常量池放入池中

直接内存:不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。这部分内存也被频繁的使用,而且也可能导致 OutOfMemoryError异常

本机的直接内存不会受到Java堆大小的限制,但是,既然是内存,肯定还是会受到本机总内存(包括RAM以及SWAP区或者分页文件)的大小以及处理器寻址空间的限制。服务器管理员在配置虚拟机参数时,会根据实际内存设置-Xmx等参数信息,

但经常忽略直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统的限制),从而导致动态扩展时出现OutOfMemoryError异常

JDK1.4加入了NIO类,引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作,避免了在Java堆和native堆中来回复制数据

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

java 内存作用_【深入JVM】JAVA内存区域以及作用 的相关文章

  • 【C#学习笔记】保存文件

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • Windows下Qt静态编译全解

    Windows下Qt静态编译全解 2012 04 16 16 59 05 转载 标签 杂谈 分类 QT Windows下Qt静态编译全解 2010 09 08 13 42 分类 QT 编译准备 下载NOKIA网站上的QT SDK 解压或安装
  • pyautogui 的截图及图片匹配

    pyautogui 的截图 import pyautogui as pg 官网有提在不同的操作系统上 具体操作还不太一样 我的环境 win10 python3 9 截图需依赖 Pillow PIL 库 截全屏 pg screenshot 只
  • 渗透测试流程是什么?7个步骤给你讲清楚!

    在学习渗透测试之初 有必要先系统了解一下它的流程 静下心来阅读一下 树立一个全局观 一步一步去建设并完善自己的专业领域 最终实现从懵逼到牛逼的华丽转变 渗透测试是通过模拟恶意黑客的攻击方法 同时也是在授权情况下对目标系统进行安全性测试和评估
  • 移动端安卓文字垂直居中偏上偏移的解决方案

    移动web里小于12px的文字居中异常的问题 最后还是改为12px才近乎解决了问题 但是有时候或许并不是那么乐观 你并不能将原本定为10px的字体改为12px 那该怎么办呢 我们都知道 移动端为了高清屏显示1px的border 会有那么几种
  • 【Java】【NIO】【01】NIO设计理念

    什么是NIO NIO中的N 既有New的含义 也有Non blocking的含义 它是Java1 4之后推出来的一套非阻塞式IO接口 用于解决高并发 提升IO性能 NIO的主要改变 NIO主要的改变在于以下几点 通过Channel取代Str
  • python 测试开发岗 笔面试编程题

    题目网址 leetcode 题目名称 1 两数之和 3 无重复字符的最长子串 20 有效的括号 32 最长有效括号 53 最大子数组和 70 爬楼梯 80 删除有序数组中的重复项 II 83 删除排序链表中的重复元素 141 环形链表 20
  • loadrunner报错问题处理

    CPU使用率过高 Code 29723Error Failed to deliver a p2p message from parent to child process reason communication error Code 60
  • 医院信息化系统术语汇总

    以下文章来源于罗福如 作者Rolia 关于专业术语 每个领域都有领域中的专业术语 了解掌握也是为了工作上的沟通 让我们听懂同行说的话 也能展示自身具备专业知识 下面基本专业术语概念 从事智慧医疗 互联网医疗的你应该掌握 1 医院信息系统 H
  • idea热部署静态资源无法及时生效

    飘 Idea 每次修改JS文件都需要重启Idea才能生效解决方法 最近开始使用Idea 有些地方的确比eclipse方便 但是我发现工程每次修改JS或者是JSP页面后 并没有生效 每次修改都需要重启一次Tomcat这样的确不方便 我想Ide
  • 解决Access32位驱动器问题

    Access数据源驱动器是32位的 64位不支持 只要打开32位版本的ODBC管理工具就可以了 下面是我解决方法 打开这个就行了C Windows SysWOW64 odbcad32 exe
  • linux c++编程

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 一 前提 以下环境均采用VMWare虚拟机安装CentOS6 6环境下编程 想要
  • 常用的linux命令还只能说出cd、ls?下次面试说出这几个命令提升你的层次吧!

    mpstat 显示各个可用CPU的状态 P 指定CPU编号 mpstat p 5 指定查看编号5CPU的状态 间隔时间 次数 mpstat 2 3 两秒一次合计输出三次 pidstat 显示指定进程CPU 内存 线程 设备IO等资源的占用情
  • 个人记账管理系统(大二第一学期JAVA期末项目)

    项目简介 设置账单条目Account类 定义属性 支出金额expend 收入金额income 时间datestr 账单条目备注remark 账单条目类型type 账单条目流水编号id 设置用户User类 定义用户信息 帐号昵称UserNam
  • C++模版深度解析

    在C 发明阶段 C 之父Stroustrup和贝尔实验室的C 小组对原先的宏方法进行了修订 对其进行了简化并将它从预处理范围移入了编译器 这种新的代码替换装置被称为模板 而且它变现了完全不同的代码重用方法 模板对源代码重用 而不是通过继承和
  • 支持向量机SVM

    文章目录 SVM简单理解 SVM代码实现 导入数据集 SVM实现 画出支持向量 总结 SVM简单理解 在下二维平面存在以下数据点 不同颜色代表不同类别 现在需要画一条直线 想将两个类别分别开来 当有新数据加入时 根据这条直线 也能将新数据正
  • Vue:ElementUI怎么引入外部svg图标

    推荐阿里巴巴图标库 命令行运行npm install svg sprite loader 创建icons svg文件夹 将svg文件放在该文件夹下面 在components文件夹中创建svgiconfont vue文件 文件内容
  • 【啃书】《智能优化算法及其MATLAB实例》例7.2模拟退火算法进行函数寻优

    文章目录 问题描述 仿真过程 matlab源码 问题描述 仿真过程 matlab源码 该脚本要命名为func2 m 适应度函数 function value func2 x y value 5 cos x y x y y y y value
  • postgresql优化案例三:recheck cond

    文章目录 1 SQL语句 2 查看改善前执行计划 3 解决方案 3 1增加work mem的size 3 2 创建合适的索引 4 改善后执行计划 1 SQL语句 delete from sap dispatchingd hist a whe

随机推荐

  • 使用 VBA 自动化 Chrome / Edge

    介绍 Internet Explorer classic 下称IE 是基于ActiveX技术的 对于 Webscraping 或从 VBA 等 OLE 感知编程语言进行测试等任务 自动化 IE 非常容易 但微软将在不久的将来终止对 IE 的
  • C# 定义宏

    define ENABLE TEST 必须在 using 的上方定义 using System Collections using UnityEngine public class TestDefine MonoBehaviour void
  • 通配符*和?的区别

    通配符 和 的区别是 可以用来代替零个 单个或多个字符 而 仅可以使用代替一个字符 表示匹配的数量不受限制 而 的匹配字符数则受到限制
  • 17:UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

    菜鸟学python习题17运行错误 我的 直接在open里加了一个 errors ignore 即可 第一个人 使用python的时候经常会遇到文本的编码与解码问题 其中很常见的一种解码错误如题目所示 下面介绍该错误的解决方法 将 gbk
  • Rocketmq机制回顾总结

    1 应用场景如解耦 削峰填谷 异步处理 分布式事务中间协调 2 nameserver producer broker consumer 3 brokerName brokerId brokerRole Namesrvaddr常用配置参数 4
  • mysql查询语句group by 语句报错

    高版本的mysql 在查询语句时 有group by 会报错 报错信息如下 gt 1055 Expression 40 of SELECT list is not in GROUP BY clause and contains nonagg
  • [nifi] 数据管理分发工具

    官方文档 Apache NiFi 运行 HOME bin run nifi bat 打开网页 127 0 0 1 nifi 账号密码 HOME logs nifi app log 找到如下字段 开始界面 简单实例 1 本地 gt 本地 2
  • sqlplus,imp 等命令无效解决

    今天我在数据库上准备导入数据 但在输入sqlplus nolog 时报出 sqlplus 不是有效的内部命令 解决方案 在oracle ora92 bin 下找到了 sqlplus imp exp 等命令 点开可以执行 也可以在dos下进入
  • C# 算法系列 - 贪婪算法(背包问题)

    using System namespace ConsoleApp1 class Program static void Main string args 贪婪算法 背包问题 背包问题 Knapsack problem 是一种组合优化的NP
  • React 第七章 条件渲染

    根据条件渲染不同组件 可以实现组件的显示与隐藏 第一种 在函数内部通过属性props条件的判断 返回不同的组件 进行控制显示隐藏 如果返回null则表示不展示隐藏 1 条件渲染 function UserGreeting props ret
  • 银河麒麟软件源更新

    银河麒麟有用软件源 1 银河麒麟系统无法更新下载软件 原因是软件源失效 2 需要更换有效的软件源 3 修改软件源地址 在etc apt 的sources list文件里添加镜像源 deb http archive ubuntu com ub
  • js 在元素前后添加元素

    在元素前后添加创建的元素 话不多说 直接上代码 div div
  • axios上传formdata失败以及nodejs接受formdata失败

    axios上传formdata失败以及nodejs接受formdata失败 今天用nodejs写一个上传图片的功能 因为这个功能是用在vue中的 我首先在nodejs服务器上用jquery的ajax写好了这个功能 可是移植到vue中却出现了
  • 怎么查mac电脑是不是正品_mac电脑怎么投屏 教你选择适合自己的Mac投屏软件

    mac上有什么好的投屏软件嘛 苹果手机ios投屏到mac用哪款投屏软件 mac投屏ipad该用哪款软件怎么操作 macdown小编给大家介绍的这几款Mac投屏软件 各有各的特色 总有一款适合你投屏 1 AIrServer 7 for Mac
  • python人工智能,分类例解

    分类是一种常见的机器学习算法 是一种有监督的算法 简单说就是给出学习集数据都是带标签的 通过训练学习集数据获得模型 对未来给出的实际数据 根据模型进行分类 这里采用K最近邻算法 KNN K nearest neighbour KNN算法非常
  • 中国电子学会2023年05月份青少年软件编程C++等级考试试卷四级真题(含答案)

    1 怪盗基德的滑翔翼 怪盗基德是一个充满传奇色彩的怪盗 专门以珠宝为目标的超级盗窃犯 而他最为突出的地方 就是他每次都能逃脱中村警部的重重围堵 而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼 有一天 怪盗基德像往常一样偷走了一颗珍贵的
  • FFmpeg的H264解码实战

    本文的内容是解码裸流 即从本地读取h264码流 然后解码成YUV像素数据的过程 1 FFmpeg视频解码流程 如上图所示是通过FFmpeg进行视频解码的流程 音视频流媒体高级开发 学习路线 www bilibili com video BV
  • flea-auth使用之角色子模块介绍

    角色子模块 本篇主要介绍笔者 授权模块 flea auth 下的角色子模块 1 总览 表名 中文描述 flea role 角色 flea role rel 角色关联 角色 权限 权限组 flea role group 角色组 不参与授权 f
  • SpringBoot简介及整合数据访问层

    目录 Springboot简介 parent starter 引导类 Springboot整合mybatis Springboot整合mybatis plus Springboot整合Druid Springboot整合Redis yml格
  • java 内存作用_【深入JVM】JAVA内存区域以及作用

    Java虚拟机所管理的内存将会包括以下几个运行时数据区域 所有线程共享的区域 Java堆 方法区 线程私有的 程序计数器 Java虚拟机栈 与对象内存分配关系最密切的内存区域是 堆内存 栈内存 虚拟机栈 虚拟机中内存最大的一块 java堆