当Future.get()的返回值太大时,是否有其他解决方案?



我得到一个大的schedulefuture数据作为Future.get()的返回。我相信schedulefuture只能在get()完成时检索返回。所以它总是会生成一个"java.util.concurrent"。Java .lang.outofmemoryerror . Java堆空间错误

是否有任何替代的解决方案,我可以拆分我的返回部分,当我使用scheduleExecutorService?谢谢。

让任务将结果保存到磁盘,并让get()方法返回结果写入的File

请注意,序列化不会帮助您避免内存问题,因为您首先要避免在内存中创建整个结果(传递它不会使用更多内存)。

您将需要使用"流"方法,其中一小部分数据在创建后立即写入磁盘。

同样地,结果的用户应该将数据流输入,处理内存中的一小部分,然后丢弃这部分(取消引用),然后再读取更多的数据。

为了方便,您也可以考虑使用一个临时文件:

File file = File.createTempFile("foo", "dat");
file.deleteOnExit(); // optional, but safer

最新更新