当前位置: 首页 > news >正文

java 内存模型

程序计数器

  1. 线程私有
  2. 主要字节码解释器通过读取程序计数器来选取下一条需要执行的指令,比如分支,循环,跳转和异常处理
  3. 如果执行的是java 方法,那么程序计数器记录的时候虚拟机字节码指令的地址,如果执行的是native 方法,那么是计数器的值为空,
  4. 这个区域不会发生OOM。

虚拟机栈

  1. 线程私有
  2. 每个方法在执行是都会创建栈帧,用于存放局部变量,操作数栈,动态链接和方法出口
  3. 存放了编译时期可知的各种基本数据类型,对象引用, 和returnAddress 类型(指向了一条字节码指令的地址),其中long 和double 占用两个局部变量空间,其余类型占用一个,局部变量所需的空间再编译期完成分配,当进入一个方法时,分配多大的局部变量是已经确定的,不会改变局部变量的大小
  4. 如果线程请求的栈深度大于虚拟机允许深度,会抛出stackOverFlow 异常;如果虚拟机栈可以动态扩展,但是无法申请到足够的内存,那么将抛出outOfMemory 异常

本地方法栈

  1. 和虚拟机栈的功能类似,不同点主要是为虚拟机的native 方法服务。hotSpot 虚拟机直接把本地方法栈和虚拟机栈合二为一。
  2. 参数设置
    1. -xss 每个线程的栈大小,1.5+ 的每个线程栈大小为1M

Java堆

  1. 线程共享
  2. 主要存放对象实例,是java 内存收集器管理的主要区域,可以分为新生代和老年代。新生代又可以分为eden 区、from Survior区域和to Survior 区域。
  3. 参数设置
    1. -Xms 最小堆内存
    2. -Xmx 最大堆内存
    3. -XX NewSize 设置新生代最小空间大小
    4. -XX MaxNewSize 设置新生代最大空间大小
    5. -XX NewRatio 新生代和老年代的比例,比如NewRatio=2 ,那么新生代占2/3,老年代占1/3
    6. -XX SurviorRatio 新生代中eden 和survior 的比例,默认值为8

方法区(永久代)

  1. 线程共享
  2. 已经被虚拟机加载的存储类信息、常量、静态变量。
  3. 不同的虚拟机的不同方法区有不同的实现,hotSpot 方法区在1.7 前后发生了变化
    1. jdk1.7 版本把原本放在方法区的字符串常量放在了java 堆中;
    2. jdk8 则把永久代给删除了,取而代之的是metaSpace

  1. 参数设置
    1. -XX PermSize 设置永久代的最小空间大小
    2. -XX MaxPermSize 设置永久代最大空间大小

运行时常量池

  1. 是方法区的一部分
  2. 运行时常量池相对于Class文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入Class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。

metaSpace

  1. 1.8 版本之后取代了永久代,因此元空间回收不是传统的垃圾回收过程中进行的
  2. 元空间的内存管理是通过对类和元数据的加载、卸载和转移来实现的。当类或元数据不再被使用时,会被标记为可卸载状态,并等待垃圾回收器执行卸载操作。元空间的回收是通过类和元数据的卸载来实现的,这些操作通常由JVM的类卸载器或元数据卸载器来执行。
  3. 为啥要用元空间替换永久代
    1. 动态分配内存:元空间的内存是在堆外分配的,并且可以动态调整大小,因此可以更好地适应应用程序的需要。
    2. 元空间的内存使用效率更高:元空间的实现方式不需要使用传统的对象引用,而是使用指针或其他方式来表示类和元数据,因此可以更有效地利用内存。
    3. 更易于调优:元空间的大小可以通过命令行参数或JVM启动参数进行设置和调整,而永久代的大小无法动态调整。

相关文章:

java 内存模型

程序计数器 线程私有主要字节码解释器通过读取程序计数器来选取下一条需要执行的指令,比如分支,循环,跳转和异常处理如果执行的是java 方法,那么程序计数器记录的时候虚拟机字节码指令的地址,如果执行的是native 方法…...

Linux——缓冲区封装系统文件操作

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、FILE二、封装系统接口实现文件操作1、text.c2、mystdio.c3、mystdio.h 一、FILE 因为IO相…...

深度学习系列59:文字识别

1. 简单文本: 使用google加的tesseract,效果不错。 首先安装tesseract,在mac直接brew install即可。 python调用代码: import pytesseract from PIL import Image img Image.open(1.png) pytesseract.image_to_string(img, lan…...

学习JAVA的第七天(基础)

目录 static 静态变量 静态方法 工具类: static的注意事项 继承 继承的好处 继承的特点 方法的重写 书写格式 override重写注解 方法重写的要求 this关键字 super关键字 static static表示静态,是Java中的一个修饰符,可以修饰成…...

GoLand 相关

goland 下载依赖 go mod tidy:保持依赖整洁 go mod tidy 命令的作用是清理未使用的依赖,并更新 go.mod 以及 go.sum 文件。 go mod tidy 和 go mod vendor 两个命令是维护项目依赖不可或缺的工具。go mod tidy 确保了项目的 go.mod 文件精简且准确&…...

顶顶通呼叫中心中间件-如何使处于机器人话术中的通话手动转接到坐席分机上

文章目录 前言联系我们实现步骤freeswitch命令转接api接口转接 前言 本文讲解呼叫中心中间件如何手动转接通话。 场景:利用自动外呼进入机器人,在通话过程中,转接到坐席分机上。 联系我们 有意向了解呼叫中心中间件的用户,可以点…...

RabbitMQ开启MQTT协议支持

1)RabbitMQ启用MQTT插件 rootmq:/# rabbitmq-plugins enable rabbitmq_mqtt Enabling plugins on node rabbitmq: rabbitmq_mqtt The following plugins have been configured:rabbitmq_managementrabbitmq_management_agentrabbitmq_mqttrabbitmq_web_dispatch Ap…...

Orange3数据预处理(列选择组件)数据角色及类型描述

在Orange3的文件组件中,datetime、categorical、numeric以及text代表不同种类的数据类型,具体如下: datetime:代表日期和时间类型的数据。通常用于时间序列分析、生存分析和其他需要考虑时间因素的机器学习任务中。例如&#xff0…...

c sharp资料

资料 c#菜鸟教程 Xml XmlNode 类 XPath或运算 SelectNodes的使用 基础 string.Format 复合格式设置标准数字格式字符串...

《低功耗方法学》翻译——第十四章:电源切换网络设计

第十四章:电源切换网络设计 功率门控是在待机或休眠模式下降低漏电功率最有效的方法,但这种方法存在诸如休眠晶体管占用的硅面积、永久和虚拟电源网络的布线资源以及复杂的功率门控设计和实现过程等开销,影响设计风险和进度。 除了开销外&a…...

如何使用Axure RP制作web页面并实现无公网ip远程访问——“cpolar内网穿透”

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…...

vue2实现无感刷新token

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 引言: &#x1f4…...

每日学习-2月18日

知识点:二叉树 中序遍历算法: void InOrderTraverse(BiTree T) { if(TNULL) return; InOrderTraverse(T->lchild); printf("%c",T->data); InOrderTraverse(T->rchild); } 算法过程: (1)调用InOrderTraverse(T)&#…...

AI 使人机交互发生根本性转变 AI芯片主战场,变了

语言将主导AI交互界面,同时AI应用正逐步适应人类 AI正创造人为中心和基于代理的未来。 这是 OpenAI 首位投资人 Vinod Khosla 关于 AI 交互与革命的最新洞察。Khosla 对常见术语“AI 硬件”和“小工具”表示怀疑,他主张从一个新的视角来看待这些设备&a…...

容器库(12)-std::unordered_multiset

unordered_multiset是以key为元素无序的关联容器,搜索、移除和插入操作是平均常数的时间复杂度。unordered_multiset在内部没有按任何顺序排列,而是放在桶当中的,放进哪个桶是通过计算key的hash值来决定的。和unordered_set不同的是&#xff…...

Mysql学习之事务日志undolog深入剖析

Undo log redo log 是事务持久性的保证,undo log是事务原子性的保证。在事务中更新数据的前置操作其实是要先写入一个undo log。 如何理解undo 日志? 事务需要保证原子性,也就是事务中的操作要么全部完成,要么什么也不做。但有时…...

springboot整合druid及可能遇到的问题

第一步&#xff0c;导入druid的maven依赖 在这里&#xff0c;我们选择导入druid-spring-boot-starter&#xff0c;使用配置文件的形式进行配置&#xff08;不需要再编写配置类&#xff09; <dependency><groupId>com.alibaba</groupId><artifactId>dr…...

c++文件的打开、读写和关闭。缓冲区的使用和控制。

在C中&#xff0c;文件的打开、读写和关闭通常使用标准库中的文件流对象&#xff08;如std::ifstream用于输入文件&#xff0c;std::ofstream用于输出文件&#xff09;来完成。这些对象封装了与操作系统交互的底层细节&#xff0c;使得文件操作更为简单和安全。 以下是文件打开…...

网络层的DDoS攻击与应用层的DDoS攻击之间的区别

DDoS攻击&#xff08;即“分布是拒绝服务攻击”&#xff09;&#xff0c;是基于DoS的特殊形式的拒绝服务攻击&#xff0c;是一种分布式、协作的大规模攻击方式&#xff0c;主要瞄准一些企业或政府部门的网站发起攻击。根据攻击原理和方式的区别&#xff0c;可以把DDoS攻击分为两…...

Windows系统安全策略设置之本地NTLM重放提权

经安全部门研究分析&#xff0c;近期利用NTLM重放机制入侵Windows 系统事件增多&#xff0c;入侵者主要通过Potato程序攻击拥有SYSTEM权限的端口伪造网络身份认证过程&#xff0c;利用NTLM重放机制骗取SYSTEM身份令牌&#xff0c;最终取得系统权限&#xff0c;该安全风险微软并…...

OpenClaw技能开发:为QwQ-32B添加股票数据查询功能

OpenClaw技能开发&#xff1a;为QwQ-32B添加股票数据查询功能 1. 为什么需要开发股票查询技能 去年我在研究量化交易策略时&#xff0c;经常需要手动查询股票数据。每次打开浏览器、登录交易平台、输入代码、导出CSV的重复操作让我疲惫不堪。直到发现OpenClaw可以通过技能扩展…...

nli-distilroberta-base环境部署:Docker容器内Python依赖与模型权重加载验证

nli-distilroberta-base环境部署&#xff1a;Docker容器内Python依赖与模型权重加载验证 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务。它能智能分析两个句子之间的关系&#xff0c;判断它们之间的逻辑关联。这项技术在智能客…...

用格子玻尔兹曼方法 - 浸没边界法模拟圆柱绕流(LBM - IBM in C++)

格子玻尔兹曼方法-浸没边界法模拟圆柱绕流 LBM- IBM &#xff08;C&#xff09;在计算流体力学&#xff08;CFD&#xff09;的领域里&#xff0c;格子玻尔兹曼方法&#xff08;Lattice Boltzmann Method, LBM&#xff09;和浸没边界法&#xff08;Immersed Boundary Method, IB…...

解锁虚幻引擎资源解析工具的高效解析与实战应用指南

解锁虚幻引擎资源解析工具的高效解析与实战应用指南 【免费下载链接】UEViewer Viewer and exporter for Unreal Engine 1-4 assets (UE Viewer). 项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer 虚幻引擎资源解析是游戏开发与逆向工程领域的关键技术&#xff0…...

热门 PyPI 包 LiteLLM 遭投毒,窃取凭据和认证令牌

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士专栏供应链安全数字化时代&#xff0c;软件无处不在。软件如同社会中的“虚拟人”&#xff0c;已经成为支撑社会正常运转的最基本元素之一&#xff0c;软件的安全性问题也正在成为当今社会的…...

Keil5实战:手把手教你制作自定义FLM插件(附完整驱动配置)

Keil5实战&#xff1a;手把手教你制作自定义FLM插件&#xff08;附完整驱动配置&#xff09; 在嵌入式开发领域&#xff0c;Flash编程算法&#xff08;FLM&#xff09;是连接开发环境与目标芯片闪存的重要桥梁。当我们需要支持非标准闪存芯片或特殊外设接口时&#xff0c;自定义…...

Windows文件完整性验证神器:HashCheck Shell扩展完全指南

Windows文件完整性验证神器&#xff1a;HashCheck Shell扩展完全指南 【免费下载链接】HashCheck HashCheck Shell Extension for Windows with added SHA2, SHA3, and multithreading; originally from code.kliu.org 项目地址: https://gitcode.com/gh_mirrors/ha/HashChec…...

开源像素艺术生成器落地实操:像素幻梦在独立游戏开发中的应用

开源像素艺术生成器落地实操&#xff1a;像素幻梦在独立游戏开发中的应用 1. 像素幻梦工具介绍 Pixel Dream Workshop&#xff08;像素幻梦创意工坊&#xff09;是一款基于FLUX.1-dev扩散模型的下一代像素艺术生成工具。与传统的AI绘图工具不同&#xff0c;它采用了明亮的16-…...

Linux 配置文件 bashrc

本文详细介绍了Linux系统中配置文件bashrc的作用、使用方法和配置技巧。bashrc文件是bash shell在用户登录时自动执行的脚本&#xff0c;用于定义用户的环境变量和别名等个性化设置。文章首先解释了bashrc文件的重要性&#xff0c;并介绍了如何编辑和修改该文件。接着&#xff…...

Neeshck-Z-lmage_LYX_v2实战教程:异常友好提示机制与错误定位指南

Neeshck-Z-lmage_LYX_v2实战教程&#xff1a;异常友好提示机制与错误定位指南 1. 引言&#xff1a;当绘画工具变得“会说话” 想象一下&#xff0c;你兴致勃勃地打开一个AI绘画工具&#xff0c;输入了一段精心构思的描述&#xff0c;点击生成&#xff0c;然后……页面卡住了。…...