堆空间和 Lambda 表达式求值
与传统循环语法相比,使用 Java 8 的 lambda 语法迭代集合会引发对潜在内存开销的担忧。在本例中:
myStream.forEach(item -> { // do something useful }); // Equivalent Old Syntax: myStream.forEach(new Consumer<Item>() { @Override public void accept(Item item) { // do something useful } });
Lambda 表达式是否在每次调用时创建堆对象?
是的,lambda 表达式可能会创建匿名类实例。但是,该行为是特定于实现的。 Oracle 的 JVM 通常为不捕获值的 lambda 表达式创建单例。
内存消耗和性能
创建堆对象会影响性能和内存使用,尤其是在处理大型且复杂的数据结构。然而,这种开销的程度取决于几个因素:
您是否更喜欢传统循环?
在某些情况下,使用传统循环迭代大型多级数据结构可能仍然是首选,特别是当 lambda 表达式捕获复杂或大型对象时。但是,需要注意的是:
以上是Java 中的 Lambda 表达式是否总是会产生大量堆开销?的详细内容。更多信息请关注PHP中文网其他相关文章!