在 java 代码中设置 -noverify 标志

Set -noverify flag in java code

我想通过 java 代码将 -noverify 设置为 VM 参数。我在网上找不到任何资源来帮助解决这个问题。

如果我使用 System.setProperty(..,..) ,我应该将什么设置为值或键?

我试过使用 System.property("Xverify","none") 但这似乎不起作用。

注意:这只是运行一些测试用例。由于这个问题,我正在关闭字节码验证 - link

谢谢。

您需要使用“-Xverify:none”作为 vm 参数。 生产环境建议不要使用-Xverify:none

对于那些不熟悉字节码验证的人来说,它只是 JVM 类加载过程的一部分,用于检查代码中是否存在某些危险和不允许的行为。您可以(但不应该)通过添加 -Xverify:none

在许多 JVM 上禁用此保护

请查找有关使用此标志的副作用的完整详细信息 - https://blogs.oracle.com/buck/entry/never_disable_bytecode_verification_in

让我总结一下这个答案中的评论。

  • 关闭字节码验证是危险的,尤其是当您知道应用程序会抛出 VerifyError 时。这意味着应用程序生成了无效的字节码,当 JVM 执行它时,结果是不可预测的。例如,JVM 可能会崩溃,如 .
  • 没有以编程方式关闭字节码验证的合法方法。否则,这将是一个严重的安全漏洞,允许 运行 在没有明确许可的情况下编写不安全的代码。
  • The link 您提到的 PowerMock 问题证实 Javassist 库中存在一个错误。解决此问题的正确方法是更新到已修复此错误的较新 Javassist 版本。