`
76756154
  • 浏览: 34929 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JDK7之函数句柄MethodHandle

    博客分类:
  • Java
 
阅读更多

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安装包.zip\JDK7...

    答复: 通过代码简单介绍JDK 7的MethodHandle,并与.NET的委托对比(二)

    标题中的“答复: 通过代码简单介绍JDK 7的MethodHandle,并与.NET的委托对比(二)”表明本文将深入探讨Java中的MethodHandle概念,并将其与.NET平台上的委托进行对比。MethodHandle是JDK 7引入的一个强大特性,它...

    jdk7 jdk-7u80-linux-x64 网盘下载

    ### JDK 7 (Java Development Kit 7) 版本介绍 #### 一、JDK 7 概述 JDK 7(Java Development Kit 7)是Java平台的一个重要版本,由Oracle公司发布。它是Java SE 7标准的实现,为开发者提供了用于编写Java应用程序...

    JDK7 Windows32位

    3. **动态类型语言支持**:通过JSR 292(方法句柄和invokedynamic指令),JDK7增强了对动态语言的支持,允许在运行时更灵活地处理方法调用。 4. **文件系统API增强**:Java 7引入了新的java.nio.file包,提供了更...

    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-windows-x64安装包 jdk-7u80-...

    jdk-7u80-windows-x64.exe 【官方下载的jdk1.7、jdk7,windows 64位版】

    Java 7,也被称为JDK 7或Java SE 7 (Java Standard Edition 7),是在2011年发布的,引入了多项重要的新特性和改进。以下是其中的关键亮点: 1. **多语言支持**:Java 7增加了对其他编程语言的支持,如Groovy、Scala...

    jdk_api函数大全

    **JDK API函数大全概述** JDK(Java Development Kit)是Java编程语言的核心工具集,它包含了编写、编译、调试以及运行Java应用程序所需的所有工具和库。JDK API(Application Programming Interface)函数大全是...

    jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (win-64位) 百度网盘下载

    jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (win-64位) 资源共享

    jdk7chm,java7帮助,jdk7api,jdk1.7帮且文档

    jdk7chm,java7帮助,jdk7api,jdk1.7帮且文档,jdk7api chm,JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了...

    Java JDK 7学习笔记 PDF

    7. **动态语言支持**:JDK 7引入了 invokedynamic 指令,这是Java虚拟机的四大基础操作之一,用于支持动态类型语言的实现,如Groovy和JRuby。 8. **异常链**:JDK 7允许在捕获异常时保留原始异常信息,形成异常链,...

    jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (linux-rpm 64位) 百度网盘下载

    jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (linux-rpm 64位) 资源共享

    jdk7下载下载

    JDK7是Oracle公司发布的Java平台的一个重要版本,它的全称为"Java SE 7"(Java Standard Edition 7)。这个版本在2011年发布,引入了许多新特性和改进,旨在提升开发效率和增强程序性能。 1. **多语言支持**:JDK7...

    JDK1.8【函数式接口】【定义与使用】【源码】

    JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....

    jdk7 免安装版 win64

    jdk7免安装版,可以正常使用,有问题可以联系我,JDK(Java Development Kit)就是Java的开发工具包,无论是开发javase,javaee,javaee.是给Java开发者必须用到的开发工具

    jdk1.7.0_79下载jdk-7u79-windows-x64

    Java 7(又称为Java SE 7或JDK 1.7)是Java平台标准版的第七个主要版本。它于2011年发布,带来了许多新的特性和改进,包括: - **Strings in Switch语句**:允许在switch语句中直接使用字符串,提高了代码的可读性...

    JDK7api JDKAPI

    2. **流(Stream)和函数式编程**:JDK7引入了Stream API,允许对集合进行函数式操作,如过滤、映射、归约等,使得处理大量数据变得更加简洁高效。 三、文件系统API增强 1. **NIO.2(New I/O 2.0)**:JDK7引入了NIO...

    jdk6,jdk7,jdk8,jdk9,jdk10 windox、linux版本 百度云

    官网 jdk6,jdk7,jdk8,jdk9,jdk10 windox 32位、64位、linux 32位、64位 百度云。

    jdk-7-windows-x32

    **Java Development Kit (JDK) 7 for Windows 32位详解** JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的...无论是新手还是经验丰富的开发者,理解并熟练掌握JDK 7都是必要的技能之一。

    jdk-7u67-linux-x64.tar包现在 linux jdk下载

    在这个场景中,我们关注的是`jdk-7u67-linux-x64.tar`文件,这是一款适用于64位Linux操作系统的JDK 7更新67版本的归档文件。 1. **JDK版本**: `7u67`指的是JDK 7的第67个更新。Java通常发布主要版本(如JDK 8、JDK ...

    jdk1.7 32位官方正式版 jdk-7u79-windows-i586 下载

    jdk-7u79-windows-i586.exe JDK7 稳定版 源官方下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Global site tag (gtag.js) - Google Analytics