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...
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (win-64位) 资源共享
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-...
jdk7chm,java7帮助,jdk7api,jdk1.7帮且文档,jdk7api chm,JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了...
jdk7 jdk-7u80-linux-x64 网盘下载
jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载
JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....
NULL 博文链接:https://rednaxelafx.iteye.com/blog/479301
1.1 JDK7新特性<一>概述 . . . . . . . . . . . . . . 1.2 JDK7新特性<二> 语法 . . . . . . . . . . . . . 1.3 JDK7新特性<三> JDBC4.1 . . . . . . . . . . 1.4 JDK7新特性<四> NIO2.0 文件系统 . . . 1.5 JDK...
jdk7,openjdk7,适用于arm64、aarch64架构linux等国产化服务器,如银河麒麟V10、uos等服务器系统。 详细信息 jdk7 arm64 aarch64 。亲测可用。
jdk-7u80-windows-x64.exe 【官方下载的jdk1.7、jdk7,windows 64位版】
jdk api函数大全,提供了所有编译java程序代码所需要的api函数,都是以中文方式讲解。
jdk7免安装版,可以正常使用,有问题可以联系我,JDK(Java Development Kit)就是Java的开发工具包,无论是开发javase,javaee,javaee.是给Java开发者必须用到的开发工具
jdk-7u79-windows-i586.exe JDK7 稳定版 源官方下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
JDK1.7最终版,jdk-7u80,包含文件如下: jdk-7u80-linux-i586.gz jdk-7u80-linux-x64.tar.gz jdk-7u80-windows-i586.exe jdk-7u80-windows-x64.exe
kettle jar包, jdk7版本和jdk8版本 kettle jar包, jdk7版本和jdk8版本
包中包含jdk-7u80-linux-x64.tar.gz和oracle-java7-jdk_7u80_amd64.deb,其中deb包是使用命令把tar.gz转换生成的,Ubunt18.04无法直接安装openjdk-7-jdk,Oracle官网不好下载,而且网上很多下载的都是tar.gz包,不是...
JDK 17.0.7 的主要特点 支持 Java 应用程序的跨平台性:JDK 17.0.7 支持 Windows、Linux 和 macOS 等操作系统,使开发人员能够在同一平台上开发并运行 Java 应用程序。 改进的性能和稳定性:JDK 17.0.7 包括许多性能...
jdk7 jdk-7u80-windows-x64 网盘下载
jdk7安装包jdk7安装包jdk7安装包jdk7安装包jdk7安装包jdk7安装包jdk7安装包