Heim >Java >javaLernprogramm >Bietet Methodenreferenz-Caching in Java 8 Leistungssteigerungen?

Bietet Methodenreferenz-Caching in Java 8 Leistungssteigerungen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-17 06:27:03922Durchsuche

Does Method Reference Caching in Java 8 Offer Performance Gains?

Methodenreferenz-Caching in Java 8

In Java 8 wurden Methodenreferenzen eingeführt, die eine präzise Syntax für die Referenzierung von Instanzmethoden und Konstruktoren bereitstellen. Es bestehen jedoch Bedenken, ob das Zwischenspeichern dieser Referenzen von Vorteil ist. Um dieses Thema zu verstehen, ist es wichtig, zwischen dem Caching von Methodenreferenzen für häufige Ausführungen derselben Aufruf-Site und deren Zwischenspeicherung für die mehrfache Verwendung einer Methodenreferenz durch verschiedene Aufruf-Sites zu unterscheiden.

Methodenreferenz-Caching für die gleiche Aufrufseite

Betrachten Sie den folgenden Code, in dem Foo.func() wiederholt aufgerufen wird doSomethingWithAFunc():

class Foo {

   Y func(X x) {...} 

   void doSomethingWithAFunc(Function<X,Y> f){...}

   void hotFunction(){
        doSomethingWithAFunc(this::func);
   }

}

Das Zwischenspeichern von this::func würde angeblich die Erstellung neuer anonymer Klasseninstanzen bei jeder Ausführung von hotFunction() verhindern. Die JVM optimiert dieses Szenario jedoch bereits, indem sie die beim ersten Aufruf des Lambda erstellte Call-Site-Instanz wiederverwendet. Das Zwischenspeichern der Methodenreferenz ist in diesem Fall überflüssig.

Methodenreferenz-Caching für verschiedene Call-Sites

Betrachten Sie im Gegensatz dazu das folgende Beispiel:

Runnable r1 = System::gc;
Runnable r2 = System::gc;

Hier erzeugen zwei verschiedene Aufrufseiten Methodenverweise auf dieselbe Zielmethode System.gc() in java.lang.System. Die JVM darf eine einzelne Lambda-Instanz gemeinsam nutzen, die aktuelle Implementierung in Java 8 sieht dies jedoch nicht vor. Dies liegt an den ungewissen Leistungsvorteilen der Verwaltung eines Caches von Lambda-Instanzen.

Best Practices

Angesichts dieser Überlegungen wird es im Allgemeinen nicht empfohlen, Methodenverweise zwischenzuspeichern, sofern sie nicht vorhanden sind Dabei handelt es sich um spezifische Leistungsprobleme, die durch Messungen identifiziert wurden. Caching kann möglicherweise das Programmausführungsverhalten verändern und sollte nur in den folgenden Fällen in Betracht gezogen werden:

  • Wenn es zahlreiche Aufrufseiten gibt, die auf dieselbe Methode verweisen
  • Wenn die Lambda wird im Konstruktor oder bei der Klasseninitialisierung erstellt und:

    • Wird von mehreren gleichzeitig aufgerufen Threads
    • Erleidet eine Leistungseinbuße während des ersten Aufrufs

Das obige ist der detaillierte Inhalt vonBietet Methodenreferenz-Caching in Java 8 Leistungssteigerungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn