二、flink的内存管理机制
0.flink的内存划分
1.flink在JVM的heap内有自己的内存管理空间。
2.在flink中内存被分为三个部分,分别是Unmanaged区域,Managed区域,Network-Buffer区域
3.Unmanaged区域是指flink不管理这部分区域,它的管理由JVM管理,用于存放User Code
4.Managed区域是指flink管理这部分区域,它不受jvm管理不存在GC问题,用于存放Hashing,Sorting,Caching等数据
5.Network-Buffer区域是指flink在进行计算时需要通过网络进行交换数据的区域。用于存放Shuffles,Broadcasts数据。
1.flink使用堆外内存
1.为了解决大量对象在JVM的heap上创建会带来OOM和GC的问题,flink将大量使用的内存存放到堆外.
2.flink在堆外有一块预分配的固定大小的内存块MemorySegment,flink会将对象高效的序列化到这块内存中。
MemorySegment由许多小的内存cell组成,每个cell大小32kb,这也是flink分配内存的最小单位。你可以把
MemorySegment想象成是为Flink 定制的 java.nio.ByteBuffer。它的底层可以是一个普通的 Java