内容提要
JEP 472提议限制将来的Java版本中JNI和FFM API的使用,以增强安全性和性能。该提议包括对JNI使用发出警告和调整FFM API。目标是要求开发人员对任何JNI和FFM API的使用进行明确批准。文章解释了JNI使用的风险,如内存损坏和绕过访问检查。提议建议采取分阶段的方法限制JNI的使用,并提供了启用本地访问的选项。文章还提到了一个新工具,jnativescan,用于帮助识别使用JNI的库。过渡到更严格的JNI限制可能需要进行调整,但将有助于构建更安全的Java生态系统。
延伸解读
JNI限制的阶段性实施
JEP 472采取分阶段方法限制JNI使用。初期对加载和链接本地库的操作发出警告,未来计划将默认行为改为deny,即抛出IllegalCallerException。这种渐进方式让开发者有时间调整代码,避免突然中断。
如何启用本地访问
开发者可通过命令行选项--enable-native-access启用特定代码的本地访问。例如,--enable-native-access=ALL-UNNAMED为类路径上所有代码启用,或指定模块列表如--enable-native-access=M1,M2。这有助于避免警告和未来限制。
控制限制影响的选项
--illegal-native-access选项控制本地访问限制的影响,模式包括allow(允许无警告)、warn(首次非法访问发出警告,即将发布的默认)和deny(每次非法访问抛出异常,未来默认)。开发者可主动使用deny模式识别需调整的代码。
新工具jnativescan
为帮助识别使用JNI的库,将引入新工具jnativescan。该工具可扫描库并报告JNI使用情况,促进开发人员调整,确保平稳过渡到更严格的JNI限制。
Q&A
JEP 472的主要目标是什么?
JEP 472的主要目标是限制未来Java版本中JNI和FFM API的使用,以增强安全性和性能。
JNI使用存在哪些风险?
JNI使用的风险包括内存损坏和绕过访问检查,这可能影响Java平台的完整性。
开发人员如何启用特定Java代码的本地访问?
开发人员可以通过命令行选项--enable-native-access启用特定Java代码的本地访问。
JEP 472提议的限制措施是如何分阶段实施的?
JEP 472提议采取分阶段的方法,初期将对加载和链接本地库的操作发出警告。
如何控制本地访问限制的影响?
本地访问限制的影响可以通过--illegal-native-access选项进行控制,允许、警告或拒绝非法本地访问。
jnativescan工具的作用是什么?
jnativescan工具用于帮助识别使用JNI的库,促进开发人员的调整。