我使用 sttp lib 和 akka 后端从服务器加载文件。 以下任一方法都会导致加载 1Gb 文件时占用大量内存:
import com.softwaremill.sttp._
val file: File = new File(...)
sttp.response(asStream[Source[ByteString, Any]])
.mapResponse { src =>
src.runWith(FileIO.toPath(file.toPath, options, 0))
}
sttp.response(asFile(file, false))
是否有机会以 block 的形式写入数据并在写入后立即从内存中逐出 block ?
最佳答案
根据您的绘图,您的应用程序不需要大量内存。有高达 1700 MB 的“峰值”,但就在垃圾收集器运行之后,堆的使用量下降到 250 MB。 sttp 和 Akka 创建了很多短命对象;然而,垃圾收集器可以很好地清理你的内存。
我使用 124 MB 内存运行您的客户端应用程序,只是为了验证它不需要 2GB 堆来下载 1GB 文件:
sbt -mem 124 run
关于java - 使用 akka 流将数据分块写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59082262/