当前位置:  开发笔记 > 编程语言 > 正文

Ant的<javac>任务抛出StackOverflowException

如何解决《Ant的<javac>任务抛出StackOverflowException》经验,为你挑选了1个好方法。

我正在尝试使用以下ant任务从一个干净的目录(无增量编译)编译来自不同包的100多个Java类:


    
   



    Compiling

    
        
            
            
        
    

但是,第一次运行编译任务时,总是会得到一个StackOverflowException。如果我再次运行任务,编译器将进行增量构建,并且一切正常。这是不可取的,因为我们正在使用CruiseControl进行每日自动构建,这会导致错误的构建失败。

作为一个快捷的解决方案,我创建了2个单独的任务,在每个任务中编译项目的各个部分。我真的不认为此解决方案会随着将来添加更多的类而保持不变,并且我不想每次我们达到“编译限制”时都添加新的编译任务。



1> McDowell..:

很高兴知道。什么可能导致或导致Java代码编译期间出现StackOverflowError?

评估Java文件中的长表达式很可能会消耗大量内存,并且由于这是与其他类的编译一起完成的,因此VM只会耗尽堆栈空间。您生成的类可能正在推动其内容的法律限制。见章Java虚拟机的局限性4.10中的Java虚拟机规范,第二版。

修复1:重构类

由于正在生成您的类,因此这可能不是一个选择。尽管如此,还是值得看一下您的类生成工具提供的选项,以查看它是否可以减少麻烦。

修复2:增加堆栈大小

我认为Kieron在提及-Xss参数时有一个解决方案。javac接受许多非标准参数,这些参数在版本和编译器供应商之间会有所不同。

我的编译器:

$ javac -version
javac 1.6.0_05

要列出所有选项,我将使用以下命令:

javac -help
javac -X
javac -J-X

认为默认情况下,javac的堆栈限制为512Kb。您可以使用以下命令将此编译器的堆栈大小增加到10Mb:

javac -J-Xss10M Foo.java

您可能能够在Ant文件以通过这个compilerarg嵌套在元素的javac任务。


    

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有