【问题标题】:Java - performance when using anonymous classes for lazy evaluationJava - 使用匿名类进行延迟评估时的性能
【发布时间】:2018-03-29 21:47:26
【问题描述】:

在 Java 中使用匿名类实现参数的惰性求值是否存在性能问题?似乎每次调用此代码时都会创建每个对象,然后它们都将被 GC。

例子:

a.func(
    new Lazy1() {
        public void func1() {
            call1();
        }
    },
    new Lazy2() {
        public void func2() {
            call2();
        }
    });

其中func 调用func1func2 取决于a 的某些字段。

【问题讨论】:

  • “是否存在任何性能问题”与“每次都会创建每个对象”是正交的。后者当然是正确的;但它是否是性能问题取决于它的使用方式。
  • 这比if/else 语句慢得多,如果这就是你的意思的话。它对您的用例是否重要是另一个问题。
  • 请注意,Java 从 Java 8 开始就有 lambda 表达式。Lazy 应该是一个 Runnable,两个 lazy 应该写成 lambda 表达式或方法引用。

标签: java


【解决方案1】:

匿名类拥有对外部类的隐式引用。它可能会对您的性能产​​生轻微影响,尤其是当垃圾滚来滚去时,这种情况下没有必要让外部类保持活力。当不再需要外部类时,您将收集更多垃圾而不是使外部类超出范围。

参考:Java anonymous class efficiency implications

Ref2:Java8 Lambdas vs Anonymous classes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2018-04-14
    • 2021-05-17
    • 2013-03-09
    • 2019-06-19
    相关资源
    最近更新 更多