Java 8 中的方法引用缓存:详细检查
简介
使用时Java 8 的方法参考中,出现了一个关于缓存的潜在好处的问题。本文探讨了缓存方法引用的含义,并就其何时发挥优势提供了指导。
区分调用站点和方法引用执行
区分这一点至关重要使用无状态或有状态 lambda 频繁执行同一调用点,以及不同方法频繁使用对同一方法的方法引用之间call-sites.
示例分析
考虑以下示例:
Runnable r1 = null; for (int i = 0; i <p>这里,同一个调用点被执行两次,产生无状态 lambda,实现将打印“共享”。</p><pre class="brush:php;toolbar:false">Runnable r1 = null; for (int i = 0; i <p>与在这个示例中,同一个调用站点被执行两次,生成一个包含对运行时实例的引用的 lambda,并且该实现将打印“unshared”但“shared class”。</p><pre class="brush:php;toolbar:false">Runnable r1 = System::gc, r2 = System::gc; System.out.println(r1 == r2 ? "shared" : "unshared"); System.out.println(r1.getClass() == r2.getClass() ? "shared class" : "unshared class");
相反,最后一个示例包括两个单独的调用站点,生成等效的方法引用,但从 Java 8.0.05 开始,它将打印“unshared”和“unshared” class."
JVM 行为
Java 虚拟机 (JVM) 在处理方法引用方面发挥着重要作用。它使用invokedynamic指令,该指令引用LambdaMetafactory中的JRE引导方法。编译器提供生成 lambda 实现类所需的参数。
JVM 可以灵活地记住和重用第一次调用期间形成的 CallSite 实例。对于无状态 lambda 和单个调用站点,JVM 通常会创建一个 ConstantCallSite,其中包含常量对象的 MethodHandle。
另一方面,对于带有参数的 lambda(例如 this::func),JVM 可能会缓存它们,但它涉及维护参数和 lambda 实例之间的映射的额外开销。目前,JVM 不缓存此类 lambda。此行为类似于对不同调用站点创建的相同目标方法的方法引用。
缓存注意事项
基于上述几点,缓存方法引用可能会产生不同的结果,但不一定有更好的性能。在实施任何缓存机制之前应测量性能影响。在某些特定情况下,缓存可能会有所帮助:
- 当多个调用点引用同一个方法时
- 当在构造函数/类初始化中创建 lambda 时
- 当使用点将由多个并发执行时线程
- 当第一个 lambda 调用的较低性能是关注
结论
在某些场景下,缓存方法引用可以是一种优化技术。然而,缓存的决定应该基于对代码和具体性能要求的仔细分析。 JVM 对方法引用的处理为优化 Java 8 中的 lambda 和方法引用使用提供了坚实的基础。
以上是Java 8 是否缓存方法引用以及何时应考虑缓存它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文分析了2025年的前四个JavaScript框架(React,Angular,Vue,Susve),比较了它们的性能,可伸缩性和未来前景。 尽管由于强大的社区和生态系统,所有这些都保持占主导地位,但它们的相对人口

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

Node.js 20通过V8发动机改进可显着提高性能,特别是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精制的调试工具,提高开发人员的生产率和应用速度。

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

本文介绍了SnakeyAml中的CVE-2022-1471漏洞,这是一个允许远程代码执行的关键缺陷。 它详细介绍了如何升级春季启动应用程序到Snakeyaml 1.33或更高版本的降低风险,强调了依赖性更新

本文使用lambda表达式,流API,方法参考和可选探索将功能编程集成到Java中。 它突出显示了通过简洁性和不变性改善代码可读性和可维护性等好处

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver CS6
视觉化网页开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中