9.2.2内存管理的模型及其实现类的解析
在2016年1月4号发布的 Spark 1.6中,提出了一个新的内存管理模型,即统一内存管理管理模型,对应在Spark 1.5 及之前的版本则使用静态的内存管理模型。关于新的统一内存管理模型,可以参考https://issues.apache.org/jira/secure/attachment/12765646/unified-memory-management-spark-10000.pdf。在该文档中详细描述了各种可能的设计以及各设计的优缺点。另外也可以参考网上对Spark内存管理模型解析非常深入的博客http://0x0fff.com/spark-memory-management/(Alexey Grishchenko),博客内容包含了静态内存模型管理与动态内存模型管理的详细说明。
为了解决现有基于JVM托管方式的内存模型所存在的缺陷,ProjectTungsten设计了一套新的内存管理机制,在新的内存管理机制中,Spark的operation可以直接使用分配的binary data(二进制数据)而不是JVM objects。避免了数据处理过程中不必要的序列化与反序列化的开销,同时基于off-heap方式管理内存,降低了GC所带来的开销。
ProjectTungsten通过sun.misc.Unsafe来管理内存,关于sun.misc.Unsafe(