簡體   English   中英

JVM如何優化一個流暢的api

[英]How does the JVM optimize a fluent api

JVM 能否優化這段代碼

如何在 Java 編譯器或 JVM 中優化此代碼,如果此代碼是 java 編寫的,我特別要求進行優化

Stream.of(1, 2, 3)
      .map(i -> i + 1)
      .map(i -> i + 1)
      .map(i -> i + 1);

Stream.of(1, 2, 3)
      .map(i -> i + 3)

或者更加激進,並用基本的 for 循環替換它,這可能會提高性能。

在 clojure 中有一個轉換器的概念,它是一種優化,您可以將可縮減的函數組合成單個函數並消除延遲傳播的開銷。 JVM 可以在流暢的 api 中轉換一些函數嗎?

例如,如果我們有一個用於 Java 流的裝飾器接口

decor-map(decor-map(base-map (i -> i + 1), i -> i +1), i -> i + 1)

然后我假設編譯可以以某種方式嘗試轉換裝飾器映射。 但是在流暢的 api 中這怎么可能呢?

Javac 真的沒有做太多優化,據我所知,它真的只做常量折疊

換句話說:許多其他語言(例如 C++)在將源代碼編譯為機器代碼時直接應用的所有復雜優化選項...... javac 不做任何這些。

為什么:因為這是在運行時(在有意義的地方)由 JIT 發生的。

結論:您不必擔心“源代碼方面”的 Java 代碼性能。 您嘗試使用簡短的方法編寫簡單的代碼,以便 JIT 可以實現魔術並內聯所有這些,並將其轉換為經過優化以支持您的實際使用模式的機器代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM