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