JVM内存模型及垃圾回收算法

【智能制造】- APS系列|05 APS 排产的五大底层算法逻辑 很多人误以为APS只是给生产工单排先后顺序,实则整套系统依托成熟算法体系,完成多维度约束下的最优生产决策在制造业数字化排产普及的当下,依旧有不少制造管理者对APS存在认知误区,将其等同于简易工单排序工具。事实上,专业级高级计划与排程系统,早已脱离单纯按时间排序的基础功能,而是依托一整套成熟完善的底层算法逻辑,整合现场各类生产限制条件,在海量变量中自动推演、筛选、输出最贴合企业经营目标的生产方案。 阅读详情

原文地址: http://blog.youkuaiyun.com/kingofworld/article/details/17718587

 

JVM内存模型总体架构图

程序计数器
多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。
虚拟机栈
线程私有的,与线程在同一时间创建。管理JAVA方法执行的内存模型。每个方法执行时都会创建一个桢栈来存储方法的的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。栈的大小决定了方法调用的可达深度(递归多少层次,或嵌套调用多少层其他方法,-Xss参数可以设置虚拟机栈大小)。栈的大小可以是固定的,或者是动态扩展的。如果请求的栈深度大于最大可用深度,则抛出stackOverflowError;如果栈是可动态扩展的,但没有内存空间支持扩展,则抛出OutofMemoryError。
使用jclasslib工具可以查看class类文件的结构。下图为栈帧结构图:

本地方法区
和虚拟机栈功能相似,但管理的不是JAVA方法,是本地方法,本地方法是用C实现的。

JAVA堆
线程共享的,存放所有对象实例和数组。垃圾回收的主要区域。可以分为新生代和老年代(tenured)。
新生代用于存放刚创建的对象以及年轻的对象,如果对象一直没有被回收,生存得足够长,老年对象就会被移入老年代。
新生代又可进一步细分为eden、survivorSpace0(s0,from space)、survivorSpace1(s1,to space)。刚创建的对象都放入eden,s0和s1都至少经过一次GC并幸存。如果幸存对象经过一定时间仍存在,则进入老年代(tenured)。


方法区
线程共享的,用于存放被虚拟机加载的类的元数据信息:如常量、静态变量、即时编译器编译后的代码。也成为永久代。如果hotspot虚拟机确定一个类的定义信息不会被使用,也会将其回收。回收的基本条件至少有:所有该类的实例被回收,而且装载该类的ClassLoader被回收

垃圾回收算法

标记-清除算法(Mark-Sweep)
从根节点开始标记所有可达对象,其余没标记的即为垃圾对象,执行清除。但回收后的空间是不连续的。

复制算法(copying)
将内存分成两块,每次只使用其中一块,垃圾回收时,将标记的对象拷贝到另外一块中,然后完全清除原来使用的那块内存。复制后的空间是连续的。复制算法适用于新生代,因为垃圾对象多于存活对象,复制算法更高效。在新生代串行垃圾回收算法中,将eden中标记存活的对象拷贝未使用的s1中,s0中的年轻对象也进入s1,如果s1空间已满,则进入老年代;这样交替使用s0和s1。这种改进的复制算法,既保证了空间的连续性,有避免了大量的内存空间浪费。

标记-压缩算法(Mark-compact)
适合用于老年代的算法(存活对象多于垃圾对象)。
标记后不复制,而是将存活对象压缩到内存的一端,然后清理边界外的所有对象。



JVM参数:

-XX:+PrintGCDetails  打印垃圾回收信息

-Xms 为Heap区域的初始值,线上环境需要与-Xmx设置为一致,否则capacity的值会来回飘动
-Xmx 为Heap区域的最大值
-Xss(或-ss) 线程栈大小(指一个线程的native空间)1.5以后是1M的默认大小
-XX:PermSize与-XX:MaxPermSize  方法区(永久代)的初始大小和最大值(但不是本地方法区)
-XX:NewRatio  老年代与新生代比率
-XX:SurvivorRatio  Eden与Survivor的占用比例。例如8表示,一个survivor区占用 1/8 的Eden内存,即1/10的新生代内存,为什么不是1/9?因为我们的新生代有2个survivor,即S1和S22。所以survivor总共是占用新生代内存的 2/10,Eden与新生代的占比则为 8/10。
-XX:MaxHeapFreeRatio  GC后,如果发现空闲堆内存占到整个预估的比例小于这个值,则减小堆空间。
-XX:MinHeapFreeRatio  GC后,如果发现空闲堆内存占到整个预估的比例大于这个值,则增大堆空间。
-XX:NewSize    新生代大小

13、数据来源介绍与操作指南 本文详细介绍了多种数据源的特点、操作步骤及适用场景,包括元数据数据源、MongoDB数据源、Pentaho Data Integration数据源、OLAP数据源、Pentaho分析数据源和OLAP4J数据源。通过流程图和表格对比,帮助用户理解不同数据源的选择与使用方法,并提供了实际应用案例和注意事项,旨在提升数据获取与分析效率,支持高效报告生成。 阅读详情

相关推荐

新手必看:LiteRadio 2c SE遥控器从开箱到飞行的完整指南(附常见问题解答)

本文为新手提供LiteRadio 2c SE遥控器的完整使用指南,涵盖从开箱到首飞的20个关键步骤。详细介绍了遥控器的功能设置、与无人机的对频技巧以及首飞注意事项,帮助用户快速掌握飞行控制,避免常见错误。特别适合无人机初学者阅读。

weixin_29209801的博客 379

【JVM】JVM内存模型(详细)

JVM内存模型(详细)

酷酷的馫博客 5万+

椭圆 —— 从理论推导到最小二乘法拟合

前言 椭圆在高中数学里就开始提到,都是从标准方程开始如: x2a2+y2b2=1(a>b>0) \frac{x^2}{a^2}+\frac{y^2}{b^2}=1(a>b>0) a2x2​+b2y2​=1(a>b>0) 其中 aaa 为椭圆的长轴,bbb 为椭圆短轴。如长轴为 111 ,短轴为 0.50.50.5 的椭圆可以这样画出 ezplot('x^2/1^2 + y^2/0.5^2 = 1',[-1.5 1.5 -1 1]) grid on; 标准方程可以很方便

学徒浩子 2万+

JVM内存模型

JVM内存模型包括:程序计数器、本地方法栈、虚拟机堆(线程)、线程栈、方法区(元空间),程序计数器、线程栈、本地方法栈是每个线程所独有的。 1. 线程栈 JVM的每一个线程对应一个线程栈,一个线程的每个方法会分配一块栈帧内存空间。栈帧中包含:局部变量表、操作数栈、动态链接和方法出口。 2. 本地方法栈 运行本地方法的空间,也就是native本地方法运行时的一块空间。3. 程序计数器 程序计数器是用于存放下一条指令所在单元的地址的地方。...

weixin_48268269的博客 4万+

用ESP32和HomeSpan自制HomeKit智能灯,手把手教你从零接入苹果家庭App

本文详细介绍了如何使用ESP32开发板和HomeSpan开源库自制原生HomeKit智能灯,从硬件搭建到软件配置,再到通过苹果家庭App控制的全过程。项目绕过了苹果MFi认证,成本低廉但功能完整,支持Siri语音控制、自动化场景等高级功能,是智能家居DIY的实用指南。

weixin_28717431的博客 321

STM32f103--ADC配置

2.对于规则通道,选中EXTI线路11或TIM8_TRGO作为外部触发事件,可以分别通过设置ADC1和ADC2的ADC1_ETRGREG_REMAP位和ADC2_ETRGREG_REMAP位实现。注意: 在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。2.在某些双ADC模式中,在完整的ADC1数据寄存器(ADC1_DR)中包含了ADC1和ADC2的规则转换数据。通过设置ADC_CR2寄存器的ADON位可给ADC上电。

weixin_51864506的博客 5313

深入浅出JVM内存模型+垃圾回收算法

前言 博主在寒假的时间,学车的空余时间又学了学周志明老师的深入理解Java虚拟机,结合之前的写下了这篇笔记,希望和大家一块学习! 众所周知,jvm分五个模块: 虚拟机栈、本地方法栈、程序计数器、方法区、和堆。 其中五大内存模块可分为两种:线程共享和线程私有 线程共享: 虚拟机栈、程序计数器、本地方法栈 线程私有: 方法区、堆 图示: 1. 程序计数器(记录当前线程) 程序计数器是一块很小的内...

改变世界的梦想从未改变 1406

从 Open SQL JOIN 走向 ABAP CDS Association:把查询写成可复用的数据模型

摘要: 本文通过飞行模型示例,对比了ABAP中三种表关联实现方式:Open SQL JOIN、CDS显式JOIN和CDS Association。重点解析了Association的本质是将表关系声明为数据模型语言,使用时通过路径表达式按需展开为JOIN。文章指出路径表达式在不同位置会默认展开为不同JOIN类型(如SELECT列表默认为LEFT OUTER),并演示了如何用[inner]强制指定INNER JOIN。最后结合S/4HANA实际案例,说明Association通过中心化关系定义和路径复用,能有效

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 382

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器

本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变化;介绍了垃圾回收的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾清除算法;然后介绍了Java中的垃圾回收器,由串行、到并行再到并发,最后到G1的演变;最后给出了垃圾回收器的对比和使用指引。

Arya的博客,专注后端领域 9482

学习QT之应用程序打包发布

一、编译QT程序(release编译) 二、将release文件夹中的可执行文件复制到一个空的文件夹中 三、使用windeployqt打包工程 切换到可执行文件路径,执行windeployqt xxx.exe: 然后就会将程序所需要用到的资源以及库文件生成到可执行文件路径下: 此时应用程序就可以点击运行了。 四、使用Enigma Virtual Box封包(将文件夹内的文件集成为单可执...

贝勒里恩的博客 762

YOLO26原创自研: 魔改Bottleneck,具备多尺度和特征通道融合的结构

魔改Bottleneck,具备多尺度和特征通道融合的结构,该模型在检测准确性方面都取得了良好的效果,尤其在缺陷检测方向。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 315

HoRain云--JVM内存模型(堆、栈、方法区)及垃圾回收算法

以下基于 JVM 内存模型的核心结构(堆、栈、方法区)及主流垃圾回收算法进行系统解析,结合技术原理、应用场景及优化实践展开说明:

2401_86544677的博客 1171

华为od 面试手撕代码题【完成任务最少小时】

华为od 面试手撕代码题【完成任务最少小时】

MISAYAONE的博客 1579

JVM内存+JVM内存模型+垃圾回收算法

JVM内存+JVM内存模型+垃圾回收算法

艺博❀ 416

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JVM内存模型及相关的垃圾回收算法

JVM模型 Java虚拟机内存模型:程序计数器、虚拟机栈、本地方法栈、Java堆以及方法区等。 程序计数器(指令计数器):程序计数器是一块很小的内存区域,它是运行速度最快的内存区域,主要用于存放下一条取指指令的地址。 虚拟机栈:栈是一种快速有效的分配存储方法,访问速度仅次于寄存器,堆栈指针向下移动,则分配新的内存,若向下移动则释放内存。 虚拟机栈主要被用于存放一些基本类型的变量,例如int、sho...

zuokuijun's blog 347

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JVM 内存模型与垃圾回收机制全解析:架构、算法、调优实践

本文深度剖析 JVM 内存模型与垃圾回收机制,涵盖内存区域划分(堆、栈、方法区等)、对象分配与回收流程、核心算法(标记-清除、复制、分代收集)及主流 GC 器(G1/ZGC)原理。结合性能调优实践(内存泄漏排查、GC 日志分析、参数配置),提供从理论到落地的系统性指南,助力开发者优化 Java 应用性能,提升稳定性与资源利用率。

大模型全栈工程师 · Thanks_ks 1347

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JVM内存模型、垃圾回收算法、垃圾收集器

JVM内存模型、垃圾回收算法、垃圾收集器JVM内存模型程序计数器(PC寄存器,线程私有)虚拟机栈(线程私有)本地方法栈(线程私有)堆(Heap- 线程共享)新生代Eden 区From Survivor 区To Survivor 区MinorGC 的过程(采用复制算法,复制->清空->互换)老年代方法区(非堆,线程共享)垃圾回收与算法如何确定垃圾引用计数法可达性分析(根搜索法)垃圾回收算...

ma815841356的博客 630

jvm内存模型gc算法垃圾回收器

1. jvm虚拟机内存模型 程序计数器、虚拟机栈、本地方法栈、堆、方法区 2. 该程序计数器 程序计数器是一块线程私有的空间,各个线程之间互不影响。当线程数超过cpu数量时一个cpu同一时间只能有一个线程执行,其它线程被切换出去,为此每个线程必须用一个独立的程序计数器,用于记录下一条要运行的指令。 如果线程正在执行一个java方法,则计数器记录正在执行的java字节码的地址,如果正在执行一个na...

heroking 299

JVM内存模型和垃圾回收算法

内存模型;垃圾回收算法;垃圾收集器;JVM参数

明豆的博客 1152

JVM架构、JVM垃圾回收机制、垃圾回收算法、垃圾回收器、JMM(内存模型)

1 JVM架构 1-1 JVM位置在哪里? 硬件——>OS——>JVM 即:JVM在操作系统之上。 1-2 JVM架构 分三大块: Class Loader Subsystem 类加载子系统 Runtime Data Area 运行时数据区 Execution Engine 执行引擎 画图: 1-3 类加载器 位置:在类加载子系统。 类加载过程:加载——>链接(验证、准备、解析)——>初始化 双亲委派机制:保证类加载和程序的安全。 1)类加载器收到类的请求 2)将这

学习开发 305

聊聊jvm内存模型及垃圾回收算法

jvm内存模型 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代)Tenured(年老代)永久代(Perm)  其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。 年轻代(New):年轻代用来存放JVM刚分配的J

何静媛 4897

JVM内存模型以及垃圾回收算法的基本认识

在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的;如下图所示 程序计数器:字节码的行号指示器。 作用: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。 程序计数器是唯...

洛雪 509

JVM内存模型,GC垃圾回收器与回收算法详解

以具体案例带你深入理解JVM内存模型,对象存储与回收

在路上 812
上一篇: 深入理解Java之线程池
下一篇: 分布式开放消息系统(RocketMQ)的原理与实践
java1993666
博客等级 码龄11年 22粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值