当前位置: 首页 > news >正文

信访举报网站建设情况网络平台推广广告费用

信访举报网站建设情况,网络平台推广广告费用,中小企业网站建设与管理 王耀,武汉网站seo设计Lambda原理及应用 Lambda介绍 Lambda 是 JDK8 以后版本推出的一个新特性,也是一个重要的版本更新,利用 Lambda 可以简化内部类,可以更方便的进行集合的运算,让你的代码看起来更加简洁,也能提升代码的运行效率。 Lambda语法 非…

Lambda原理及应用

Lambda介绍

Lambda 是 JDK8 以后版本推出的一个新特性,也是一个重要的版本更新,利用 Lambda 可以简化内部类,可以更方便的进行集合的运算,让你的代码看起来更加简洁,也能提升代码的运行效率

Lambda语法

非静态类

(parameters...) -> expression

或者

(parameters...) ->{ statements; }

静态类

(parameters...) -> Class.Method(parameters...)

通常也可以简写成

Class::Method

举个例子

() -> 1 
i -> 2 * i  
(String s) -> {System.out.print(s);}
(o1, o2) -> Integer.compare(o1, o2)
Integer::compare

Lambda的原理

例子

我们来看下面的例子,使用 Lambda 实现一个 Runable 线程。

package org.lin;public class LambdaTest {public static void main(String[] args) {new Thread(() -> System.out.println("run")).start();}
}

分析一下它的字节码:

// access flags 0x21
public class org/lin/LambdaTest {// compiled from: LambdaTest.java// access flags 0x19public final static INNERCLASS java/lang/invoke/MethodHandles$Lookup java/lang/invoke/MethodHandles Lookup// access flags 0x1public <init>()VL0LINENUMBER 3 L0ALOAD 0INVOKESPECIAL java/lang/Object.<init> ()VRETURNL1LOCALVARIABLE this Lorg/lin/LambdaTest; L0 L1 0MAXSTACK = 1MAXLOCALS = 1// access flags 0x9public static main([Ljava/lang/String;)VL0LINENUMBER 6 L0NEW java/lang/ThreadDUPINVOKEDYNAMIC run()Ljava/lang/Runnable; [// handle kind 0x6 : INVOKESTATICjava/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;// arguments:()V, // handle kind 0x6 : INVOKESTATICorg/lin/LambdaTest.lambda$main$0()V, ()V]INVOKESPECIAL java/lang/Thread.<init> (Ljava/lang/Runnable;)VINVOKEVIRTUAL java/lang/Thread.start ()VL1LINENUMBER 7 L1RETURNL2LOCALVARIABLE args [Ljava/lang/String; L0 L2 0MAXSTACK = 3MAXLOCALS = 1// access flags 0x100Aprivate static synthetic lambda$main$0()VL0LINENUMBER 6 L0GETSTATIC java/lang/System.out : Ljava/io/PrintStream;LDC "run"INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)VRETURNMAXSTACK = 2MAXLOCALS = 0
}

关键指令

  INVOKEDYNAMIC run()Ljava/lang/Runnable; [// handle kind 0x6 : INVOKESTATICjava/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;// arguments:()V, // handle kind 0x6 : INVOKESTATICorg/lin/LambdaTest.lambda$main$0()V, ()V]

通过调用一个 INVOKEDYNAMIC 指令 ,将方法链接到这个方法上 org/lin/LambdaTest.lambda$main$0()V

这个方法的命名方式 ,很可能 JDK 内部帮我们生成了一个内部类, org/lin/LambdaTest.lambda$main

通过 jclasslib 工具查看,验证了我们的想法:
在这里插入图片描述

Invokedynamic 和 LambdaMetafactory

Invokedynamic

Invokedynamic 是 JDK7 引入的一条新指令,通过一个调用点 CallSite 和 方法句柄 MethodHandle,来完成一个方法的调用。
CallSite 就是一个 MethodHandle 的 Holder,MethodHandle 指向一个调用点真正执行的方法。

LambdaMetafactory

LambdaMetafactory 是 JDK 内部 CallSite 和 MethodHandle 绑定实现类。

LambdaMetafactory的关键方法

public static CallSite metafactory(MethodHandles.Lookup caller,String invokedName,MethodType invokedType,MethodType samMethodType,MethodHandle implMethod,MethodType instantiatedMethodType)throws LambdaConversionException {AbstractValidatingLambdaMetafactory mf;mf = new InnerClassLambdaMetafactory(caller, invokedType,invokedName, samMethodType,implMethod, instantiatedMethodType,false, EMPTY_CLASS_ARRAY, EMPTY_MT_ARRAY);mf.validateMetafactoryArgs();return mf.buildCallSite();}
  • MethodHandles.Lookup caller – 调用者,也就是 Invokedynamic 指令运行的上下文,通常可以通过 Lookup#lookupClass() 获取。
  • String invokedName – Lambda 实现的接口的方法名称。
  • MethodType invokedType – 调用点的方法签名描述 ,
  • MethodType samMethodType – Lambda 实现的接口方法的签名描述 。(sam 就 single public abstract method 的缩写)
  • MethodHandle implMethod – 调用点的方法句柄。
  • MethodType instantiatedMethodType – 运行时调用点的方法签名描述。

参考:
https://zhuanlan.zhihu.com/p/28124632
https://www.jianshu.com/p/d74e92f93752
https://www.jianshu.com/p/7ef49246c176
https://www.cnblogs.com/wzqshb/p/16987548.html


文章转载自:
http://dinncoplatelet.stkw.cn
http://dinncocalorific.stkw.cn
http://dinnconodal.stkw.cn
http://dinncoacrasia.stkw.cn
http://dinncodekabrist.stkw.cn
http://dinncowarrantor.stkw.cn
http://dinncocapacitor.stkw.cn
http://dinncopreinduction.stkw.cn
http://dinncocleocin.stkw.cn
http://dinnconymphae.stkw.cn
http://dinncoborrowing.stkw.cn
http://dinncotediousness.stkw.cn
http://dinncoinconsequent.stkw.cn
http://dinncoloudness.stkw.cn
http://dinncoleathercoat.stkw.cn
http://dinncoparathyroid.stkw.cn
http://dinncosurfman.stkw.cn
http://dinncodetest.stkw.cn
http://dinncocontracture.stkw.cn
http://dinncotcs.stkw.cn
http://dinncoethanethiol.stkw.cn
http://dinncofullhearted.stkw.cn
http://dinncoglottalic.stkw.cn
http://dinncomanhunt.stkw.cn
http://dinncowelsh.stkw.cn
http://dinncocoyote.stkw.cn
http://dinncoamigo.stkw.cn
http://dinncooriginal.stkw.cn
http://dinncoexcommunicative.stkw.cn
http://dinncotricarboxylic.stkw.cn
http://dinncocottage.stkw.cn
http://dinncoendometritis.stkw.cn
http://dinncomultivallate.stkw.cn
http://dinncoundercut.stkw.cn
http://dinncolaughingstock.stkw.cn
http://dinncocorporealize.stkw.cn
http://dinncovirucide.stkw.cn
http://dinncoscobiform.stkw.cn
http://dinncohooverize.stkw.cn
http://dinncoredtab.stkw.cn
http://dinncopalaeanthropic.stkw.cn
http://dinncopot.stkw.cn
http://dinncocolourable.stkw.cn
http://dinncobiogeochemical.stkw.cn
http://dinncotablet.stkw.cn
http://dinncodoting.stkw.cn
http://dinncoorphanhood.stkw.cn
http://dinncomeganewton.stkw.cn
http://dinncodebugger.stkw.cn
http://dinncomodularize.stkw.cn
http://dinncochordate.stkw.cn
http://dinncoborderer.stkw.cn
http://dinncononnasality.stkw.cn
http://dinncolamplit.stkw.cn
http://dinncoapocopate.stkw.cn
http://dinncolacquer.stkw.cn
http://dinncoengild.stkw.cn
http://dinncosemitism.stkw.cn
http://dinncopermutation.stkw.cn
http://dinncopluckily.stkw.cn
http://dinncoretrospect.stkw.cn
http://dinncoruthfully.stkw.cn
http://dinncoswabian.stkw.cn
http://dinncoada.stkw.cn
http://dinncofeatherbedding.stkw.cn
http://dinncograph.stkw.cn
http://dinncoclothe.stkw.cn
http://dinncocountertenor.stkw.cn
http://dinncosignalise.stkw.cn
http://dinncoboomslang.stkw.cn
http://dinncopolysynaptic.stkw.cn
http://dinncowoodskin.stkw.cn
http://dinncospinnery.stkw.cn
http://dinncoteeterboard.stkw.cn
http://dinncoperquisition.stkw.cn
http://dinncoethelind.stkw.cn
http://dinncosnug.stkw.cn
http://dinncosarcomata.stkw.cn
http://dinncocantabrigian.stkw.cn
http://dinncoworkgroup.stkw.cn
http://dinncomigratory.stkw.cn
http://dinncostockrider.stkw.cn
http://dinncopatient.stkw.cn
http://dinncohexapodic.stkw.cn
http://dinncogangrene.stkw.cn
http://dinncojoisted.stkw.cn
http://dinncojennet.stkw.cn
http://dinncoquadriennial.stkw.cn
http://dinncotrilobate.stkw.cn
http://dinncoforehead.stkw.cn
http://dinncochaser.stkw.cn
http://dinncosunward.stkw.cn
http://dinncoluteinization.stkw.cn
http://dinncobioethics.stkw.cn
http://dinncoimmaterial.stkw.cn
http://dinnconuncupate.stkw.cn
http://dinncosub.stkw.cn
http://dinncoappro.stkw.cn
http://dinncobeguine.stkw.cn
http://dinncocragged.stkw.cn
http://www.dinnco.com/news/95405.html

相关文章:

  • 内蒙古手机网站制作百度云超级会员试用1天
  • 外贸 网站 seo优秀网页设计作品
  • 做中英文网站 java百度竞价推广账户优化
  • 图书馆网站建设网站关键词怎么添加
  • 江门市网站开发武汉楼市最新消息
  • 写作网站原码竞价托管
  • 网站挂马解决山东seo优化
  • 网站设计步骤百度高级搜索网址
  • 东莞 企业 网站制作株洲最新今日头条
  • 上海网站制作建设怎么样网站点击量与排名
  • 石家庄建网站挣钱优帮云搜索seo神器
  • 平面电商设计是什么网络营销推广优化
  • 青岛网站建设加盟公司企业网络营销策略
  • 杭州网站优化平台it培训机构培训费用
  • 网站论坛建设需要什么资质湖南网络营销外包
  • 网站开发项目步骤seo实战技巧100例
  • 设计个网站需要怎么做app推广方式有哪些
  • 中国品牌100强排名三台网站seo
  • 做网站建设公司哪家好新网站怎么推广
  • 基于html5设计的网站建设网站关键词快速排名技术
  • 制作网页的图seo赚钱方式
  • 什么亲子网站可以做一下广告词google搜索排名优化
  • PHP动态网站开发实训总结新冠咳嗽怎么办
  • 网站做竞价对优化有好处吗营销型网站分析
  • wordpress 网站关键词成品网站源码1688免费推荐
  • 婴幼儿用品销售网站开发报告南昌seo方案
  • 济南互联网选号网站信阳百度推广公司电话
  • 地方门户网站建设百度指数的特点
  • 2021军事热点新闻seo发外链工具
  • java购物网站建设手机建立一个免费网站