Tag:

invokestatic on interface中的静态方法

反汇编一些Java 8代码我发现一些对接口中静态方法的invokestatic调用(特别是java.util.function.Function.identity() )在const pool中使用了InterfaceMethodRef; 这就是javap -s -c -vp向我展示的内容: 15: invokestatic #66 // InterfaceMethod java/util/function/Function.identity:()Ljava/util/function/Function; 根据JVM 8规范,这是不可能的,当我在带有Java 7 major version=51 ( major version=51 )的classfile中使用此指令时,它已在此指令上抛出VerifyError。 然而,当我将主要版本更改为52 ,它开始像魅力一样工作。 请注意,我在Oracle JDK 1.8.0_60上运行。 我想知道为什么需要这个更改(调用的方法是静态链接的,不是吗?)以及是否记录在任何地方。

Oracle和Eclipse编译器生成的java字节码的差异

我们的项目执行一些Java字节码检测。 我们偶然发现了一些奇怪的行为。 假设以下代码段: public void a() { new Integer(2); } Oracle的javac将上面的代码编译成以下字节码: 0: new #2; //class java/lang/Integer 3: dup 4: iconst_2 5: invokespecial #3; //Method java/lang/Integer.””:(I)V 8: pop 9: return 和Eclipse的编译器进入: 0: new #15; //class java/lang/Integer 3: iconst_2 4: invokespecial #17; //Method java/lang/Integer.””:(I)V 7: return 如您所见,Oracle编译器在“new”之后生成“dup”,而Eclipse则不然。 在这个用例中完全正确,因为根本不使用新创建的Integer实例,因此不需要“dup”。 我的问题是: 是否对不同编译器之间的差异有一些概述? 文章/博文? 我可以安全地得出结论,如果“new”和“invokespecial”之间没有“dup”,那么在初始化之后不会使用对象吗?

java中的CAPTCHA

我想尝试用Java开发一个安全的登录系统。 我应该如何使用Java实现CAPTCHA?

Primefaces Captcha消失或无效更新/刷新无效输入?

我在h:form有以下代码片段 如果我正确输入validation码,这可以正常工作。 但是,如果我输入的值无效,则validation码组件就会消失。 我尝试删除update=”captchaGrid”属性。 这一次,validation码并没有消失。 相反,它没有在视觉上刷新,但(我猜)在内部。 因为正确键入两个单词仍会生成validation错误。 此外; 我不想使用ajax=”false” 。 更新:我也试过oncomplete=”Recaptcha.reload()” 。 没工作。 有一个错误。 但我不知道这是我的代码还是Primefaces 3.0 🙂 更新2:正如maple_shaft所指出的,事实certificate这是Primefaces / Recaptcha的一个问题。 所以我正在寻找你可能建议的任何肮脏的黑客。 任何帮助赞赏。

独立的字节码validation器

在我的字节码检测项目中,我经常在VerifyErrors上偶然发现。 但是,默认的java Verifier几乎没有提供关于哪条指令导致错误的信息(它只给出了方法和一条小消息)。 是否有任何独立的字节码validation器,它提供了一些更高级的帮助来定位错误,至少是精确的指令位置? 谢谢。