System.in的Gradle应用程序插件运行任务耗尽了堆空间

时间:2019-08-19 10:14:17

标签: java gradle

我正在处理System.in中的10 GB的内存,但是在使用gradle应用程序插件时始终会耗尽堆空间。我像mawk -f preprocess-logs.awk logs.txt | ./gradlew run一样将一个程序的输出传递到Java中,但是在处理了大约200万行时不断遇到以下错误(从htop看时,大约消耗了1GB的内存)

  

到期守护进程,因为jvm占用空间已耗尽

我的build.gradle(不需要的部分除外)如下:

apply plugin: 'application'
mainClassName = "com.PostgresLogLoader"
run {
    standardInput = System.in
}

然后我用BufferedReader消耗System.in

BufferedReader csvReader = new BufferedReader(new InputStreamReader(System.in));
String line; 
while ((line = csvReader.readLine()) != null){ /* do work */ }    

如果我构建可执行jar并直接使用,则绝不会耗尽堆空间。看来我正在消费standardInput的方式越来越不受限制。我希望每次运行并继续使用./gradlew run时都不必构建可执行文件。有什么想法吗?

0 个答案:

没有答案