我想知道是否有可能利用scala-native来执行大型内存作业。
例如,假设您有一个需要150‘t的spark作业,因此您必须在spark集群中运行5x30’t的执行程序,因为JVM垃圾收集器不会赶上更大的堆。
想象一下,99%被处理的数据都是集合中的Strings。
你认为scala-native在这方面会有帮助吗?我是说,作为Spark的替代品?
它是如何对待String的?因为jvm把它当做类,所以它也有这样的开销吗?
在JVM中,经典的30 GC内存(“堆”)GC限制是多少?我最终也会有30 up这样的限制吗?
或者这通常是个坏主意?使用scala-native进行内存中的数据处理。我的猜测是scala-offheap是更好的选择。
发布于 2016-11-08 03:59:10
与JVM上的Scala相比,内存中的数据处理是Scala原生的亮点。
SN支持所有类型的内存分配。静态分配(您可以在C中定义全局变量并使用C函数返回指向全局变量的指针)、堆栈分配、基于C malloc/free的动态分配和垃圾动态分配(Scala new)。
对于字符串,您可以使用8位/字符C字符串,Java风格的16位/字符,或者您可以实现自己的小字符串优化,如C++中所示,使用@struct和指针。
当然,您也有时间上的缺陷,比如SN仍然是0.1版本之前的版本,并且缺少要移植到Scala的Java库。
发布于 2016-09-19 16:32:00
目前这不是一个好主意,因为Scala Native还没有准备好投入生产使用。此外,Scala Native使用垃圾收集器(现在是BOEHM),并且会遇到与JVM相同的问题,但是使用Scala Native,您可以尝试手动内存管理。
https://stackoverflow.com/questions/39319474
复制相似问题