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

JVM

JVM内存模型(每个线程独立拥有,线程结束后销毁)

线程私有区

  • 程序计数器:记录当前线程字节码行号指示器,用于线程切换之后恢复执行位置。唯一不会抛出OutOfMemorryError区域
  • 虚拟机栈:每一个方法对应一个栈帧,方法执行入栈,方法结束出栈,包含局部变量表,操作数,方法出口等。递归出错会造成栈溢出,动态扩展无法申请到足够的空间内存溢出报错
  • 本地方法栈:用c,c++写的Native方法

线程共享区

  • 堆空间:JVM最大内存区域,存放对象实例和数组,GC回收核心区域,分为新生代,老生代
  • 元空间:代替之前的永生代,位于本地内存(为了避免永久代内存溢出,利用本地内存)。主要存储了一些元信息,静态变量,JIT编译之后的代码

JVM内存模型和JMM内存模型区别

  • JVM:解决内存如何存储的问题
  • JMM:定义多线程之间的共享变量的可见性,原子性,有序性规则,解决多线程并发问题

OOM溢出出现的位置

  • 虚拟机栈、本地方法栈:递归过深栈溢出,动态扩展内存不足OOM,JVM无法满足这个栈空间的扩容需求
  • Java堆:对象数量超过堆的最大容量
  • 元空间:类元素信息过多

JVM垃圾回收

判断对象已死

  • 引用计数法:有引用+1,没有-1,计数器为0判断为垃圾。但是无法解决循环引用的问题
  • 可达性分析:以GC Roots为起点,向下搜索所有引用,如果不可达就是可回收对象。
  • GC Roots包含的对象:虚拟机栈中引用对象,方法区中静态属性引用的对象,方法区中常量引用的对象,本地方法栈中native引用的对象

4中核心回收算法

  • 标记-清除
  • 标记复制
  • 标记-整理
  • 分代收集:前面三种算法的组合策略
http://www.rkmt.cn/news/97687.html

相关文章:

  • 帝国cms调用文章内容 二开基本操作
  • 30分钟掌握Ocelot网关:从零搭建微服务API网关的完整指南
  • Granite Docling 258M:重新定义文档智能处理的终极解决方案
  • 开源AI智能名片多商户商城系统中的标题引流策略研究
  • 企业即时通讯软件有哪些?(主流产品盘点) - 企业数字化观察家
  • 38、软件开发核心概念与技术解析
  • 17、Ubuntu Server使用与安装全面指南
  • AI绘画版权检测:从问题诊断到合规实践的全流程指南
  • arXiv LaTeX Cleaner 终极指南:一键清理你的论文代码
  • 25、深入探索Ubuntu社区:活动、团队与治理体系
  • GitHub教程图片为何无法显示?一键排查与修复指南
  • 27、Ubuntu系统全方位指南:功能、配置与社区参与
  • 10、Python开发指南:从Kivy应用到Django Web应用
  • 37、Linux集群搭建与Heartbeat配置详解
  • 11fps实时视频生成革命:Krea Realtime 14B如何重塑内容创作范式
  • 12、Python在专业领域的应用与实践
  • 【第1章>第12节】基于FPGA的图像闭运算处理算法的Verilog实现
  • C盘实在清理不出来了,是不是只能重装系统了?
  • Horovod分布式训练终极指南:突破千亿参数模型并行技术
  • 38、集群中DRBD与Heartbeat的配置与管理
  • 蓝易云 - 如何解决MySQL查询问题
  • 13、Python在机器人与媒体中心扩展开发中的应用
  • 蓝桥java前缀和
  • 14、Python编程:XBMC插件开发与科学计算库应用
  • 19、使用 C 和 C++ 开发 CGI 脚本
  • 打造智能机器狗:openDogV2开源机器人开发全攻略
  • javaScript基础
  • 16GB显存驱动210亿参数:GPT-OSS-20B引爆中小企业AI本地化革命
  • 39、Ubuntu 系统故障排查指南
  • 如何快速上手Legado阅读器?新手完整安装配置指南