我使用sttp和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))1Gb文件顺序加载的VisualVM图。

是否有机会在写入后立即用块写入数据并将从内存中删除?
发布于 2019-11-29 00:41:00
根据您的情节,您的应用程序不需要大量内存。有高达1700 MB的“峰值”,但在那之后,垃圾收集器运行堆的使用量下降到250 MB。sttp和Akka创建了许多短暂的对象;然而,垃圾收集器很好地清理了您的内存。
我使用124 MB内存运行了您的客户端应用程序,只是为了验证它不需要2GB堆来下载1GB文件:
sbt -mem 124 run这个应用程序没有崩溃,它只是使用了尽可能多的内存。

https://stackoverflow.com/questions/59082262
复制相似问题