JEP 342 (“限制推测执行”)已从“ 草稿 ”状态转换为“ 候选 ”状态,但尚未针对特定的JDK版本(请参见图形以了解JEP流程中的步骤 )。 Jesper Wilhelmsson 写道 , JEP 342 “涵盖了使用新的C ++编译器选项来限制 JDK本机代码中的推测性执行的初步工作。” JEP 342的“摘要”简要描述了其目的:“通过提供一种限制推测执行的方法,并在未来的发行版中实现进一步的缓解措施,来帮助开发人员和部署人员防御推测执行('Spectre')漏洞。”
JEP 342的目的是在JDK中提供一个“独特的,备用的JVM,它使用” C ++“编译器选项进行编译,这些选项限制了CPU可以执行推测性执行的程度”,并且“可以在启动时进行选择”。 JEP声明该计划是“在JDK中包括一个独特的替代JVM,该JVM使用这些选项进行编译,并且可以在启动时进行选择。” JEP 342文本描述了受此JEP影响的特定C ++编译器和选项:
- Linux gcc ( gcc 7.3.0 +)
- -mindirect-branch = thunk
- Windows VisualStudio ( Visual Studio 2017版本15.7 +)
- / Qspectre
JEP 342描述了java
启动程序的默认执行将继续保持今天的状态(避免避免推测性执行),但是具有命令行标志[ -nonspeculative
]来禁用推测性执行。 做出此决定的目的是避免始终禁止投机执行,因为它“应由最终用户决定是否限制投机执行”。 选择的能力很重要,因为正如JEP所述,“限制推测性执行...的影响对于HotSpot JVM中的C和C ++代码可能会非常重要,但对于JVM之外的C和C ++代码却可以忽略不计。 ” 值得注意的是,“非JVM代码”将始终使用新的C ++选项进行编译,以解决推测性执行,因为这些领域对性能的影响很小。
Spectre一直是对软件应用程序的多种威胁之一,很高兴看到应对这些潜在威胁的新可能性。
翻译自: https://www.javacodegeeks.com/2018/09/jep-342-the-jvm-and-spectre.html