当前位置:  开发笔记 > 编程语言 > 正文

启动java应用程序时使用-noverify

如何解决《启动java应用程序时使用-noverify》经验,为你挑选了3个好方法。

我已经看到许多应用程序采用仪器类,并-javaagent在加载时将其作为参数放入-noverify命令行.

Java doc说,-noverify关闭了类验证.

然而,为什么有人想要关闭验证,即使他们正在检测课程?



1> Cephalopod..:

当它与-javaagent它一起使用时,很可能不是出于性能原因,而是因为代理故意创建"无效"字节码.

应该注意的是,无效字节码可能仍然可以正常执行,因为一些验证规则非常严格.例如,this在调用超级构造函数之前,不能在构造函数中访问它,因为此时变量未初始化.但是仍然可能还有其他事情要做(参见JRebel示例).然后,您-noverify用来规避该规则.



2> Mecki..:

启动时间,我会说.在加载类时,验证类是否正确需要一些时间.由于类可能以惰性方式加载(不是在应用程序启动时加载,而是在第一次使用时),这可能会导致意外和不希望的运行时延迟.

实际上这个课程一般不需要检查.编译器不会发出任何无效的字节码或类构造.验证的原因是该类可以构建在一个系统上,在线托管并通过未受保护的互联网传输给您.在此路径上,恶意攻击者可能会修改字节码并创建编译器可能永远不会创建的内容; 可能导致JVM崩溃或可能绕过安全限制的东西.因此,在使用之前验证该类.如果这是本地应用程序,通常不需要再次检查字节码.


如果有人在2013年以后对这个答案感到奇怪,请检查Arian的答案,因为这个答案是不正确的.https://github.com/spring-projects/spring-loaded#readme
@Pavel我的回答没有错.仅仅因为存在另一个原因,为什么禁用字节码检查是一个好主意不会使得回答不那么正确.SpringLoad只是一个现有的JavaAgent,只是因为这个可能产生无效的字节代码并不意味着所有的JavaAgents都这样做,因为当得到无效的字节代码时JVM不能正常工作,这就是为什么世界上大多数软件只产生有效的原因字节,使阿里安的论证无效.

3> Scott Bale..:

调试!事实上,这就是我现在正在做的事情,以及我如何偶然发现这个问题.在Terracotta我们做了很多字节码检测,有时它会在我们调试类适配器时关闭验证器,因此我们可以看到它们在运行时的确切位置.

你是对的,我们希望验证者继续留在生产中.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有