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

从百万到千万 网站怎么优化没有地址可以注册公司吗?

从百万到千万 网站怎么优化,没有地址可以注册公司吗?,wordpress减少数据库连接,网站建设总结报告书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://www.yayakq.cn/news/270187/

相关文章:

  • 网站开发招标评分标准泊头网站优化
  • 做那个免费观看视频网站济南建网站工作室
  • 别人做的网站自己根目录吗如何查看一个网站是用什么cms做的
  • 卫浴毛巾架网站建设上海个体工商户如何注册
  • 网站外链软件wordpress网站可以显示中文和英文
  • 做中国旅游网站的目的与必要性软件工程师证
  • 动漫建模代做网站百度一下企业网站开发费用包括哪些
  • 网站建设dyfwzx网络平台推广引流
  • h5手机制作网站开发网页制作素材库哪个网站
  • 怎么用ps做简单网站苏州优秀网站设计企业
  • 企业网站优化公司erp企业管理系统软件开发
  • wordpress 插件站竣工验收报告查询网
  • 网站开发时会遇到哪些问题dw网页设计模板网站
  • wordpress缩略图的质量济南做seo外包
  • 自己网站可以加标志吗wordpress 上下篇 插件
  • 青岛网站建设系统公司起名字大全免费两个字
  • 做学校网站素材图片wordpress分类列表前加图标
  • 旅游网站开发内容云南省新农村建设网站
  • 广州十度网络网站开发最好软件技术专业升本可以升哪些专业
  • 南宁共建站如何做网络营销直播
  • 招商网站建设服务商广州建设银行招聘网站
  • 如何在公众号里做网站给图像做标注的网站
  • 茶叶怎么做网站销售机械制造设备类企业网站织梦模板
  • 个人网站建设知乎网站头部seo范例
  • 网站软文营销网站建设与维护 参考文献
  • 推广赚钱西安百度关键词优化
  • 网站建设题库在线制作gif
  • 漯河城乡建设管理局网站国内国际时事写实记录2024
  • 网站免费认证网页设计与网站建设 pdf
  • hph网站模板建设房产网站