OpenJDK邮件列表上有一个名为sjavac的工具的some buzz。另外,有两个相关的JEP:JEP 139: Enhance javac to Improve Build SpeedJEP 199: Smart Java Compilation, Phase Two

我的问题是:

  • sjavac工具到底是什么?
  • 适用于谁?
  • 如何使用?

  • 免责声明:自我回答的问题。只是想将有关此工具的知识带入StackOverflow社区,并为将来的sjavac FAQ创建引用。

    最佳答案


    sjavac工具是javac的(据说很聪明)包装器,它是由Oracle开发的,旨在提供以下功能:

  • 增量编译-仅重新编译必要的
  • 并行编译-编译
  • 时要使用多个内核
  • 将编译器保留在热VM中-将JIT的javac实例重用于连续调用

  • 重新编译一组源文件时,javac会查看.java和.class文件的时间戳,以确定要保留的内容和要重新编译的内容。这是非常粗略的,对于大型代码库可能是毁灭性的。除了时间戳记之外,sjavac还检查公共(public)API的依赖关系,以判断需要重新编译哪些文件。

    Sjavac还尝试将编译分为多个javac调用。换句话说,它为构建过程带来了高度的并行性。

    最后,将sjavac工具拆分为一个客户端部分和一个服务器部分,使您可以让sjavac在后台运行,进行JIT处理并准备在连续调用中使用。



    鼓励从事大型项目并在开发期间经常重新编译代码库的人们尝试sjavac。 (但是请注意,该工具目前正在开发中,仍然存在 Unresolved 问题。)



    该工具尚未随OpenJDK一起提供,因此您必须从OpenJDK jdk9/dev repository获得它。另外,还没有启动器,因此您可以使用java com.sun.tools.sjavac.Main调用它。

    关于java - sjavac是什么,它的用途是什么,我该如何使用它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26424759/

    10-09 20:35