【发布时间】:2016-06-29 12:11:23
【问题描述】:
我的应用程序在运行时生成 java 代码并使用 JavaCompiler API 对其进行编译。一些生成的文件可能相当大 - 多达几十万行。我发现当我在命令行中对生成的代码运行javac 命令时,或者如果我使用仅通过 JavaCompiler API 进行编译的应用程序,我可以编译其中的许多文件(~500),甚至如果它们非常大,不到两分钟。但是,如果我通过我的应用程序在 Tomcat 服务器上运行时调用 API,编译时间会超过 12 分钟(!!!)。
如果有任何关于如何提高编译性能的建议,我将不胜感激。
谢谢!
【问题讨论】:
-
我无法确切说明原因,但是当我通过调用
ToolProvider.getSystemJavaCompiler();从使用默认系统编译器切换到使用 Eclipse 的 JDT 编译器时,事情的速度显着加快。我们很乐意接受解释作为答案。 -
猜测是 Eclipse 有一个增量编译器,因此它不会每次都进行干净的构建。但这可能是错误的。也没有回答主要问题
-
用 jvisualvm 查看 jvm,看起来 javac 在单个线程中运行整个编译,而 EclipseCompiler 启动许多线程来编译
.java文件。
标签: java tomcat javac java-compiler-api javacompiler