小编Mat*_*oek的帖子

Scala Iterable Memory Leaks

我最近开始玩Scala并遇到以下问题.下面是4种不同的方法来迭代文件的行,做一些事情,并将结果写入另一个文件.其中一些方法可以像我想的那样工作(虽然使用大量内存来执行此操作)并且有些方法会使内存无处不在.

我的想法是将Scala的getLines Iterator包装为Iterable.我不在乎它是否多次读取文件 - 这就是我期望它做的.

这是我的repro代码:

class FileIterable(file: java.io.File) extends Iterable[String] {
  override def iterator = io.Source.fromFile(file).getLines
}

// Iterator

// Option 1: Direct iterator - holds at 100MB
def lines = io.Source.fromFile(file).getLines

// Option 2: Get iterator via method - holds at 100MB
def lines = new FileIterable(file).iterator

// Iterable

// Option 3: TraversableOnce wrapper - holds at 2GB
def lines = io.Source.fromFile(file).getLines.toIterable

// Option 4: Iterable wrapper - leaks like a sieve
def lines = new FileIterable(file)

def …
Run Code Online (Sandbox Code Playgroud)

memory-leaks iterable scala

6
推荐指数
1
解决办法
926
查看次数

标签 统计

iterable ×1

memory-leaks ×1

scala ×1