[JAVA] Geben Sie ein Beispiel für eine Leistungsverschlechterung an, die aufgetreten ist, als das Argument Comparator of Arrays.sort als Lambda-Ausdruck angegeben wurde

Bei der Beantwortung von NumberOfDiscIntersections of Lesson 6 of Codility in Java haben wir das Phänomen bestätigt, dass sich die Leistung bei Verwendung des Lambda-Ausdrucks verschlechtert. Ich habe es geteilt.

** Hinweis: Im Folgenden finden Sie Beispiele für Antworten auf die oben genannten Fragen im GitHub-Link. ** **.

Bei Verwendung von Lambda-Typ

In der ersten Antwort habe ich die Lambda-Formel wie folgt verwendet. Quellcode bei Verwendung des Lambda-Ausdrucks

Das Ergebnis ist wie folgt. performance.png

Wenn N groß ist, wird bestätigt, dass die Leistungsbewertung die Kriterien nicht erfüllt.

Bei Verwendung einer anonymen Klasse

Während ich versuchte, die Leistung zu verbessern und Versuch und Irrtum zu machen, habe ich sie so geändert, dass die anonyme Klasse aus dem Lambda-Ausdruck wie folgt verwendet wird. Behoben, anonyme Klasse zu verwenden

Das Ergebnis ist wie folgt. kaizen.png

Obwohl es sich um Millisekunden handelt, wird bestätigt, dass sich die Leistung verbessert hat.

Resultate und Diskussionen

Wir haben festgestellt, dass die Verwendung von Lambda-Ausdrücken im Vergleich zur Verwendung anonymer Klassen zu einer schlechten Leistung führen kann. Dies deutet darauf hin, dass ** in Fällen, in denen die Leistung dringend erforderlich ist, möglicherweise auch ein Regressionstest der Leistung erforderlich ist, wenn das Refactoring mit dem Lambda-Ausdruck ** durchgeführt wird.

Wenn ich beispielsweise im Internet nach verwandten Informationen gesucht habe: [Wie unterschiedlich ist die Leistung der einzelnen Java-Schreibstile? Ich habe die Messungen verglichen. Stream und Loops-Qiita](https://qiita.com/ota-meshi/items/40d5dcb0e99574a8a368#%E3%83%A9%E3%83%A0%E3%83%80%E5%BC%8F%E3 % 81% A8% E5% 8C% BF% E5% 90% 8D% E3% 82% AF% E3% 83% A9% E3% 82% B9), die Leistung wird durch die Lambda-Formel verbessert oder es gibt keinen Unterschied. , es ist so geschrieben. Aber Java: Lambda ist langsam? --Development Memo besagt, dass sich die Leistung aufgrund des Lambda-Ausdrucks verschlechtert. Laut Lambda und Invokedynamic Honeymoon sind die Faktoren, die die Ausführungszeit anonymer Klassen verlängern, E / A- und Jar-Dekomprimierung. Es wird davon ausgegangen, dass die Faktoren, die die Ausführungszeit des Lambda-Ausdrucks erhöhen, der Aufruf der Bootstrap-Methode und die Generierung des Bytecodes sind und die Summe der ersteren kleiner ist als die Summe der letzteren (Link Seite 38).

In diesem Fall wurde die anonyme Klasse nicht gemessen, da die Klasse vor der Ausführung generiert wurde, während die Lambda-Klasse zum Zeitpunkt der Ausführung generiert wurde, sodass sich die Leistung um diesen Betrag verschlechterte. es ist denkbar, dass.

... Ehrlich gesagt bin ich nicht sehr zuversichtlich. Wenn Sie also Vorschläge haben, würde ich mich freuen, wenn Sie mich unterrichten könnten.

Recommended Posts

Geben Sie ein Beispiel für eine Leistungsverschlechterung an, die aufgetreten ist, als das Argument Comparator of Arrays.sort als Lambda-Ausdruck angegeben wurde