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

时间:2014-07-31 23:01:07

标签: java future scheduledexecutorservice

我得到一个大的ScheduledFuture数据作为Future.get()的返回。我相信ScheduledFuture只能在get()完成时检索返回。 所以它总会生成一个" java.util.concurrent.executionexception java.lang.outofmemoryerror java heap space"我的机器出错了。

当我使用scheduleExecutorService时,是否有任何替代解决方案可以将我的回报分成几部分?感谢。

1 个答案:

答案 0 :(得分:1)

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

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

您需要使用“流式”方法,即在创建数据时将小部分数据写入磁盘。

类似地,结果的用户应该将数据流入,处理内存中的小部分,然后丢弃部分(取消引用它),然后再阅读。

为方便起见,您还可以考虑使用临时文件:

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