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

flink 为啥使用MemorySegment 来管理内存

文章目录

      • 减少 GC 压力
      • 优化内存访问
      • 堆外内存(Off-Heap Memory)支持
      • 高效的序列化与反序列化
      • 内存分配的可控性
      • 适应不同的内存分配需求
      • 内存安全性

减少 GC 压力

Java 的自动垃圾回收(GC)机制在处理大量对象分配和释放时可能会产生性能瓶颈。在处理大量数据时频繁地分配和回收内存会触发较多的 GC,影响系统的稳定性和延迟。

MemorySegment 的内存管理是手动的,而不是依赖 JVM 的垃圾回收机制。它直接管理大块的内存(通常是堆外内存,或者直接内存),避免了大量的小对象进入垃圾回收器的堆中,从而减少了 GC 的频率和时间开销。

优化内存访问

Flink 中 MemorySegment 提供了高效的字节级别的访问和操作方式。相比使用 Java 内置的数组、Buffer 等结构,MemorySegment 提供更细粒度的控制,允许直接操作字节,从而减少中间对象创建和内存拷贝。

内存对齐:Flink 可以通过 MemorySegment 实现对齐的内存访问,减少 CPU 在进行内存读写时的开销,提升数据处理的性能。

堆外内存(Off-Heap Memory)支持

MemorySegment 可以直接使用堆外内存(off-heap memory)。Java 的堆内存虽然方便,但在大数据场景下堆外内存(直接内存)有以下好处:

堆外内存不会受 JVM 堆大小的限制,能处理更大的数据集。
堆外内存不受 JVM 的 GC 影响,减少 GC 停顿带来的延迟。
更灵活的内存分配策略,减少内存碎片。

高效的序列化与反序列化

在 Flink 中,数据在流动和传输时通常需要序列化和反序列化。MemorySegment 提供了字节级别的存储方式,使得 Flink 可以更高效地进行序列化和反序列化操作,避免使用复杂的 Java 对象,减少对象头和对象引用带来的额外开销。
这里解释下java 对象的占用内存大小问题
Java 对象存储密度低。Java 的对象在内存中存储包含 3 主要部分:对象头、实例数据、对齐填充部分。例如,一个只包含 boolean 属性的对象占一共占16 byte:对象头占 8byte, boolean 属性占 1 byte,为了对齐达到 8的倍数额外占 7 byte。而实际上只需要 1byte

内存分配的可控性

使用 MemorySegment,Flink 可以对内存的分配和回收进行更精确的控制。例如,Flink 中的排序和聚合操作会大量使用内存。通过 MemorySegment,Flink 可以手动管理这些操作所需的内存,避免 Java 自带的内存管理机制带来的不可预测性。

适应不同的内存分配需求

Flink 需要在不同的场景下灵活管理内存,例如:

对于缓冲区和缓存数据,可以在内存中保存大量数据块。
在批处理或流处理中,需要高效的中间数据存储。
通过 MemorySegment,Flink 可以适应各种内存使用场景,并通过手动管理内存实现高效的数据存储和访问。

内存安全性

MemorySegment 中的一些 API 提供了明确的边界检查和内存访问控制,避免了直接操作内存时可能出现的越界访问等问题,增加了内存使用的安全性。


http://www.kler.cn/a/319179.html

相关文章:

  • debian 系统更新升级
  • PHP反序列化_3-漏洞利用
  • Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用
  • Python的Matplotlib
  • CCI3.0-HQ:用于预训练大型语言模型的高质量大规模中文数据集
  • SpringBoot实战(三十一)集成iText5,实现RSA签署PDF
  • 性能测试1初步使用Jmeter
  • el-table中根据状态改单元格样式
  • 医学数据分析实训 项目五 分类分析--乳腺癌数据分析与诊断
  • mybatis-plus公共字段自动填充fillStrategy()方法和strictFill()方法
  • Windows环境运行.sh脚本提示找不到wget指令的问题
  • CSS基本概念以及CSS的多种引入方式
  • Python模拟真人鼠标轨迹算法
  • 使用umy-ui 优化带有大量输入框、下拉框的ElementUI el-table
  • Leetcode 1472. 设计浏览器历史记录
  • 开源音频处理项目推荐【持续更新】
  • 《C++设计新思维-泛型编程与设计模式之应用》阅读记录
  • DY按图搜索商品API:解锁电商新趋势
  • LeetCode 257. 二叉树的所有路径,dfs
  • 29. RabbitMQ队列模型
  • 多用户自定义商城小程序源码系统 独立部署 到源代码包以及搭建部署教程
  • 根据源码解析Vue2中对于对象的变化侦测
  • 搭建HAproxy----7层负载均衡集群
  • FDA辅料数据库在线免费查询-药用辅料
  • 灵当CRM multipleUpload.php 文件上传致RCE漏洞复现
  • 双11好物推荐有哪些?五大双十一好货推荐!