JVM:
Java不同的世代使用不同的GC算法。
JVM存在的问题:
Flink的内存管理:
MemorySegment
,它代表了一段固定长度的内存(默认大小为 32KB),也是 Flink 中最小的内存分配单元,并且提供了非常高效的读写方法。每条记录都会以序列化的形式存储在一个或多个MemorySegment
中。taskmanager.network.numberOfBuffers
来配置MemoryManager
管理的,由众多MemorySegment
组成的超大集合。Flink 中的算法(如 sort/shuffle/join)会向这个内存池申请 MemorySegment,将序列化后的数据存于其中,使用完后释放回内存池。默认情况下,池子占了堆内存的 70% 的大小。TypeInformation
类表示,TypeInformation 支持以下几种类型:BasicTypeInfo
: 任意Java 基本类型或 String 类型。BasicArrayTypeInfo
: 任意Java基本类型数组或 String 数组。WritableTypeInfo
: 任意 Hadoop Writable 接口的实现类。TupleTypeInfo
: 任意的 Flink Tuple 类型(支持Tuple1 to Tuple25)。Flink tuples 是固定长度固定类型的Java Tuple实现。CaseClassTypeInfo
: 任意的 Scala CaseClass(包括 Scala tuples)。PojoTypeInfo
: 任意的 POJO (Java or Scala),例如,Java对象的所有成员变量,要么是 public 修饰符定义,要么有 getter/setter 方法。GenericTypeInfo
: 任意无法匹配之前几种类型的类。操纵二进制数据:
Flink使用堆外内存: