Java-Collections and Lambda
创始人
2025-06-01 18:24:43

Java SE API know how

集合API

根据算法访选择合适集合
linkedlist不适合搜索
随机访问数据用hashmap
数据保持有序使用treemap
通过索引访问使用数组集合

同步和非同步

访问性能统计
在这里插入图片描述

与简单的非同步访问相比,使用任何数据保护技术都会有较小的损失

设置集合大小

清楚数据的量然后分配大小,扩容也许是好的选择,如果不确定的话

集合与内存效率

元素稀疏的集合调整大小和确认是否需要一个集合存储数据
关于数组排序的快排和插入排序的选择通过确认数组的大小

Lambda和匿名类

lambda在编程上的受益很难量化
性能分析
在这里插入图片描述

匿名类会每次创建一个新对象,并不会造成性能
但是会被类加载进行加载使用

lambda并不会在循环中每次迭代创建新的对象

lambda工作方式 在JVM层面
函数描述符和invokedynamic指令

函数描述符是Lambda表达式类型,包括方法签名和返回类型
(int, int) -> int
两个参数类型和一个返回类型结果

invokedynamic 是一种动态调用指令
在运行时动态解析方法,并将其绑定到一个方法句柄(method handle)上
在lambda表达式的实现中,编译器会将表达式转换为invokedynamic指令,
让后将其绑定到一个方法句柄上

Lambda表达式的编译过程
解析表达式的参数和返回类型,生成函数描述符
将描述符转换为方法句柄类型,例如MethodType类型
根据描述符和方法句柄类型,使用MethodHandles.lookup()方法获取一个方法句柄
将方法句柄和invokedynamic指令结合起来,生成一个LambdaMetafactory对象
调用LambdaMetafactory的buildCallSite()方法生成一个CallSite对象
调用CallSite的getTarget方法获取一个方法句柄
将方法句柄绑定到表达式上得到一个函数式接口实例
real truth happening in your jvm

TIPS
类加载的性能在类路径很长的情况下会非常耗时
如果使用lambda在启动有很多类加载的时候会有显著的性能提升

相关内容

热门资讯

下一个十年级别的消费趋势:中国... 一转眼,来美国已经四十多天了。在这一个多月里,几乎隔两天都要去逛不同的超市,给我最大的感触是美国消费...
“华与华”兄弟要卖读客文化 斑马消费 范建信奉超级符号就是超级创意的华与华兄弟,要将自己手中最具“文化符号”的读客文化卖掉了。读...
九毛九求“鲜” 继太二品牌迭代升级后,九毛九集团首家“九毛九·山西菜馆”落地广州,“新太二·鲜料川菜”新店型亮相、推...
新经济“三剑客”告别估值狂热 从DeepSeek掀起AI风暴,到Labubu引爆新消费狂潮,再到创新药出海的历史性突破,新经济“三...
贝森特称2%通胀目标并非铁律 ... 财联社12月24日讯(编辑 赵昊)美国财政部长斯科特·贝森特(Scott Bessent)表示,当美...