Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sjavac是什么,它是给谁的,我如何使用它?_Java_Java 8_Javac_Java 9 - Fatal编程技术网

sjavac是什么,它是给谁的,我如何使用它?

sjavac是什么,它是给谁的,我如何使用它?,java,java-8,javac,java-9,Java,Java 8,Javac,Java 9,OpenJDK邮件列表中有一个名为sjavac的工具。此外,还有两个相关的JEP:和 我的问题是: 什么是sjavac工具 这是给谁的 我如何使用它 免责声明:自我回答的问题。只是想把这个工具的知识带给StackOverflow社区,并为将来的sjavac常见问题提供参考 什么是sjavac工具? sjavac工具是围绕javac开发的(据称是智能的)包装器,由Oracle开发,旨在提供以下功能: 增量编译-仅重新编译必要的内容 并行编译-编译期间使用多个核心 将编译器保持在热VM中-重用

OpenJDK邮件列表中有一个名为
sjavac
的工具。此外,还有两个相关的JEP:和

我的问题是:

  • 什么是
    sjavac
    工具
  • 这是给谁的
  • 我如何使用它
免责声明:自我回答的问题。只是想把这个工具的知识带给StackOverflow社区,并为将来的sjavac常见问题提供参考

什么是sjavac工具?

sjavac
工具是围绕
javac
开发的(据称是智能的)包装器,由Oracle开发,旨在提供以下功能:

  • 增量编译-仅重新编译必要的内容
  • 并行编译-编译期间使用多个核心
  • 将编译器保持在热VM中-重用JIT的javac实例进行连续调用
当重新编译一组源文件时,javac会查看.java和.class文件的时间戳,以确定保留什么和重新编译什么。这是难以置信的粗糙,对于大型代码库来说可能是毁灭性的。除了时间戳之外,sjavac还检查依赖项的公共API,以判断哪些文件需要重新编译

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

最后,sjavac工具分为客户端部分和服务器部分,这允许您让sjavac在后台运行,并进行JIT处理,以便在连续调用中使用

它是为谁设计的?

鼓励从事大型项目并在开发过程中频繁重新编译代码库的人员尝试
sjavac
。(但是请注意,该工具目前正在开发中,仍然存在未解决的问题。)

如何使用它?


该工具尚未随OpenJDK一起提供,因此您必须从。此外,还没有合适的启动器,因此您可以使用
java com.sun.tools.sjavac.Main

+1调用它,这似乎将取消Eclipse自己的编译器的唯一优势。也许将来我们不必每次都问“您使用了什么编译器?”。看起来openJDK8也有该代码,不确定它是否正在运行,但是:IMO
sjavac
不应该是开发人员必须设置为直接使用的东西;它应该是每个IDE内部使用的。换句话说,“它是为谁设计的?”——每个人。你为什么需要一个新工具?为什么不能修改
javac
本身来进行增量编译、并行编译,并接受目录作为参数而不是单个文件?看起来(不确定)这将包含在Java 9发行版中(请参阅)。