Spark 内存管理

堆内和堆外内存规划

作为一个JVM进程,Executor的内存管理建立在JVM的内存管理之上,Spark对JVM的堆内(On-heap)空间进行了更为详细的分配以充分利用内存.同时,Spark引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用.
堆内内存受到JVM统一管理,堆外内存是直接向操作系统进行内存的申请和释放.

  1. 堆内内存
    堆内内存的大小,由Spark应用程序启动时的 -executor-memory 或 spark.executor.memory参数配置.Executor内运行的并发任务共享JVM堆内内存,这些任务在缓存RDD数据和广播(Broadcast)数据时占用的内存被规划为存储(Storage)内存,而这些任务在执行Shuffle时占用的内存被规划为执行(Execution)内存,剩余的部分不做特殊规划,那些Spark内部的对象实例,或者用户定义的Spark应用程序中的对象实例,均占用剩余的空间.不同的管理模式下,这三部分占用的空间大小各不相同.
    Spark对堆内内存的管理是一种逻辑上的"规划式"的管理,因为对象实例占用内存的申请和释放都由JVM完成,Spark只能在申请后和释放前记录这些内存,我们来看其具体流程:
    申请内存流程如下:
  • Spark在代码中new一个对象实例.
  • JVM从堆内内存分配空间,创建对象并返回对象引用.
  • Spark保存该对象的引用,记录该对象占用的内存

释放内存流程如下:

  • Spark记录该对象释放的内存,删除该对象的引用;
  • 等待JVM的垃圾回收机制释放该对象占用的堆内内存.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯子@123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值