JDK7从虚拟机级别添加了invokedynamic 命令,意图最大程度的支持动态语言调用。
函数句柄可以理解成C++的函数指针,执行的时候没有Method反射的虚拟机自检,所以理论效率会比传统反射高,测试代码如下:
package common; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.reflect.Method; public class TestMain { public static void main(String[] args) throws Throwable { MethodHandles.Lookup lookup = MethodHandles.lookup(); Foo instance = new Foo(); //搜索函数句柄 MethodType methodType = MethodType.methodType(void.class); MethodHandle methodHandle = lookup.findVirtual(Foo.class, "doSomething", methodType); methodHandle.invoke(instance); //解除反射检测,使用invokedynamic命令直接执行 Method method = Foo.class.getDeclaredMethod("doSomething"); methodHandle = lookup.unreflect(method); int testTimes = 9999999; long t1 = System.currentTimeMillis(); for(int i=0;i<testTimes;i++){ methodHandle.invokeExact(instance); } long t2 = System.currentTimeMillis(); System.out.println("句柄调用:"+(t2-t1)); t1 = System.currentTimeMillis(); for(int i=0;i<testTimes;i++){ method.invoke(instance); } t2 = System.currentTimeMillis(); System.out.println("反射调用:"+(t2-t1)); t1 = System.currentTimeMillis(); for(int i=0;i<testTimes;i++){ instance.doSomething(); } t2 = System.currentTimeMillis(); System.out.println("直接调用:"+(t2-t1)); } }
每种方式执行9999999次,实际运行耗时如下
句柄调用:107ms
反射调用:69ms
直接调用:3ms
实际执行效率句柄调用比反射慢,可能是JDK7刚刚实现函数句柄,还未优化导致,而反射已经过多个版本的优化,期望在JDK1.8+里能够得到优异的表现
相关推荐
JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7...
标题中的“答复: 通过代码简单介绍JDK 7的MethodHandle,并与.NET的委托对比(二)”表明本文将深入探讨Java中的MethodHandle概念,并将其与.NET平台上的委托进行对比。MethodHandle是JDK 7引入的一个强大特性,它...
### JDK 7 (Java Development Kit 7) 版本介绍 #### 一、JDK 7 概述 JDK 7(Java Development Kit 7)是Java平台的一个重要版本,由Oracle公司发布。它是Java SE 7标准的实现,为开发者提供了用于编写Java应用程序...
在ARM64架构下,JDK 7可能包括对ARM...此外,还有其他社区和开发者为ARM64架构提供了JDK 7的构建版本,例如Arch Linux ARM提供了jdk7-openjdk 7.u261_2.6.22-1包,这是一个OpenJDK Java 7开发工具包,适用于aarch64架构
jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-...
3. **动态类型语言支持**:通过JSR 292(方法句柄和invokedynamic指令),JDK7增强了对动态语言的支持,允许在运行时更灵活地处理方法调用。 4. **文件系统API增强**:Java 7引入了新的java.nio.file包,提供了更...
Java 7,也被称为JDK 7或Java SE 7 (Java Standard Edition 7),是在2011年发布的,引入了多项重要的新特性和改进。以下是其中的关键亮点: 1. **多语言支持**:Java 7增加了对其他编程语言的支持,如Groovy、Scala...
**JDK API函数大全概述** JDK(Java Development Kit)是Java编程语言的核心工具集,它包含了编写、编译、调试以及运行Java应用程序所需的所有工具和库。JDK API(Application Programming Interface)函数大全是...
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (win-64位) 资源共享
JDK8的特性更现代化,适合需要高效数据处理和函数式编程的项目,而JDK7则可能更适合那些对兼容性有特定要求的项目。对于ARM架构的设备,选择相应的JDK版本可以确保软件在该平台上正常运行并充分利用硬件资源。 总的...
jdk7chm,java7帮助,jdk7api,jdk1.7帮且文档,jdk7api chm,JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了...
jdk7 32位最新版本,官网下载jdk7 32位最新版本,官网下载jdk7 32位最新版本,官网下载jdk7 32位最新版本,官网下载jdk7 32位最新版本,官网下载jdk7 32位最新版本,官网下载
7. **动态语言支持**:JDK 7引入了 invokedynamic 指令,这是Java虚拟机的四大基础操作之一,用于支持动态类型语言的实现,如Groovy和JRuby。 8. **异常链**:JDK 7允许在捕获异常时保留原始异常信息,形成异常链,...
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (linux-rpm 64位) 资源共享
JDK7是Oracle公司发布的Java平台的一个重要版本,它的全称为"Java SE 7"(Java Standard Edition 7)。这个版本在2011年发布,引入了许多新特性和改进,旨在提升开发效率和增强程序性能。 1. **多语言支持**:JDK7...
JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....
jdk7免安装版,可以正常使用,有问题可以联系我,JDK(Java Development Kit)就是Java的开发工具包,无论是开发javase,javaee,javaee.是给Java开发者必须用到的开发工具
Java 7(又称为Java SE 7或JDK 1.7)是Java平台标准版的第七个主要版本。它于2011年发布,带来了许多新的特性和改进,包括: - **Strings in Switch语句**:允许在switch语句中直接使用字符串,提高了代码的可读性...
2. **流(Stream)和函数式编程**:JDK7引入了Stream API,允许对集合进行函数式操作,如过滤、映射、归约等,使得处理大量数据变得更加简洁高效。 三、文件系统API增强 1. **NIO.2(New I/O 2.0)**:JDK7引入了NIO...
**Java Development Kit (JDK) 7 for Windows 32位详解** JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的...无论是新手还是经验丰富的开发者,理解并熟练掌握JDK 7都是必要的技能之一。