GC在while循环中

时间:2018-09-10 19:44:06

标签: java jenkins groovy

我尝试在jenkins上运行以下代码,将文件转换为字符串,然后将字符串转换为字节流。 jenkins作业由于OutOfMemoryError [java.lang.OutOfMemoryError:Java堆空间]而失败。我如何在while循环中进行垃圾回收以避免OutOfMemoryError?

def my_custom_fn(batch_x, batch_y):
    filenames = batch_x.graph.get_operation_by_name(
                  'iter/InputDataSet/filenames').outputs[0]
    n_epoch = sess.run(sess.graph.get_operation_by_name(
                  'iter/Iterator/count').outputs)[0]
    batch_size = sess.run(sess.graph.get_operation_by_name(
                  'iter/Iterator/batch_size').outputs)[0]
    # lots of other stuff

1 个答案:

答案 0 :(得分:0)

垃圾回收的设计方式是,当内存用尽时,如果可能的话,它将尝试释放更多的内存。因此,在大多数情况下,如果内存用完了,不会发生这种情况,因为JVM并未调用垃圾收集器,而是因为您确实使用了过多的内存。 就您而言,您将第一行中的整个文件读入内存。然后,您从内存中文件的字节创建输入流并处理这些字节。 可能更适合您的是直接使用FileInputStream,从文件中流式传输字节并进行处理,而不是先将完整文件缓存在String中。