【问题标题】:JavaCompiler API - slow compilation when running in tomcatJavaCompiler API - 在 tomcat 中运行时编译缓慢
【发布时间】: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


【解决方案1】:

尝试将线程优先级设置为最高值(在线程或线程池上):

setPriority(Thread.MAX_PRIORITY);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多