4

我看到在 Java7 命名方法处理程序中添加了一个新东西。它们对什么场景有用?

4

3 回答 3

7

http://www.oracle.com/technetwork/articles/javase/index-136358.html

随着在 JDK 7 中增加了对 JSR 292 的支持,动态类型语言在 JVM 中的运行速度应该比现在更快。这种支持的一个关键部分是添加了一个新的 Java 字节码,invokedynamic,用于方法调用,以及一个附带的链接机制,该机制涉及一个称为方法句柄的新结构。这些特性使动态类型语言编译器的实现者,即为 JRuby 和 Jython 等语言开发编译器的人员,能够生成在 JVM 中运行速度极快的字节码。

...

方法句柄是 java.dyn.MethodHandle 类型的简单对象,其中包含对 JVM 方法的匿名引用。方法句柄是可调用的,就像对方法的命名引用一样。然而,它的独特之处在于它是通过指针结构访问的,而不是链接名称。

于 2012-07-30T06:10:44.947 回答
6

恕我直言,这是一套超前的工具。它打算替换反射,但有一些性能问题(它可以更快或更慢,但不能始终更快)它 synatx 也有点麻烦。

Java 8 中出现的是闭包和第一类方法引用。MethodHandles 将在其中发挥重要作用,并使它们的使用/语法自然和集成。即,您将能够使用新的 java 语法,而不必直接引用此类,并且编译器将协助检查类型和异常抛出,这是现在反射无法做到的。我假设到 Java 8 发布时,它的性能问题也将得到解决。

于 2012-07-30T06:25:01.867 回答
0

JDK 7 为这种动态/运行时检查引入了一个新角色,即方法句柄(即抽象类 java.dyn.MethodHandle 的子类)。方法句柄为我们提供了调用非公共方法的不受限制的能力,例如,它可以由可以访问它的类在非公共方法上形成。与使用反射 API 相比,访问检查是在创建方法句柄时执行的,而不是在每次调用方法时执行的。

直接取自MethodHandle 及其用法的一瞥

大约在那一点上,我出现了段错误

于 2012-07-30T06:10:49.940 回答