【问题标题】:Kotlin compiler optimization?Kotlin 编译器优化?
【发布时间】:2020-03-10 02:33:18
【问题描述】:

对于类似的代码是否有某种编译时优化。 还是整个执行的复杂度与每个函数的复杂度一样?

如果是,那么分析这样的代码性能的最佳方法是什么?如果是,它们是否记录在某处?

    values
        .map { it.someKey }
        .distinct()
        .sorted()
        .fold(ArrayList()) { list, some ->
            return newList
        }

【问题讨论】:

    标签: android kotlin optimization


    【解决方案1】:

    您可以通过简单的分析找到时间复杂度。例如,我认为(不要引用我的话)distinct 的下限是O(n log n),这使得你的程序的时间复杂度也O(n log n)

    不过,对于实际的基准测试,您应该 read this post on java microbenchmarking

    至于编译器的优化,其实我们可以自己试试。

    这里有一段和你写的类似的代码段:

    fun test(values :List<Test>): String {
        return values
            .map { it.someValue }
            .distinct()
            .sorted()
            .fold("") {a,b -> a + b }
    }
    

    将它插入intellij的编译器和反编译器,插入Java,我们得到

    public final String test(@NotNull List values) {
        Intrinsics.checkParameterIsNotNull(values, "values");
        Iterable $this$fold$iv = values;
        Collection destination$iv$iv = new ArrayList(CollectionsKt.collectionSizeOrDefault($this$fold$iv, 10));
        Iterator var7 = $this$fold$iv.iterator();
    
        boolean var10;
        while(var7.hasNext()) {
            Object item$iv$iv = var7.next();
            Test it = (Test)item$iv$iv;
            var10 = false;
            String var12 = it.getSomeValue();
            destination$iv$iv.add(var12);
        }
    
        $this$fold$iv = (Iterable)CollectionsKt.sorted((Iterable)CollectionsKt.distinct((Iterable)((List)destination$iv$iv)));
        Object initial$iv = "";
        Object accumulator$iv = initial$iv;
    
        String b;
        for(Iterator var15 = $this$fold$iv.iterator(); var15.hasNext(); accumulator$iv = accumulator$iv + b) {
            Object element$iv = var15.next();
            b = (String)element$iv;
        }
    
        return accumulator$iv;
    }
    

    您可以看到 Kotlin 编译器如何内联不同的方法,从而提高性能。

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 2014-02-21
      • 2011-08-24
      • 2012-02-12
      • 2011-12-29
      • 1970-01-01
      相关资源
      最近更新 更多