2017-06-07 3 views
0

Angesichts eines heißen Stücks Code, der mit vielen Case-Optionen (und alle sind mit Unterbrechungen z. B. kann neu geordnet werden) Switch JVM herauszufinden, die häufigen Einträge, um sie vor anderen zu überprüfen?Java-Switch intelligent genug, um neu zu ordnen?

+0

Es wird in der Regel eine Sprungtabelle generieren, so dass die Frage "prüfe sie vor anderen" nicht einmal auftritt. – EJP

+0

Also nein, wenn wir einen Switch mit 100s von Fällen haben, implementieren wir besser eine Datenstruktur, die dies tut (und selbst dann ist es Leistungstests, wenn es die Zeit wert ist) ... – vach

+1

** No **. Der * Compiler * erzeugt * die Datenstruktur. – EJP

Antwort

2

Häufigkeit oder Wahrscheinlichkeit der Ausführung von Einzelfällen kommt nicht dazu. Der Compiler erzeugt entweder:

  • a tableswitch Befehl mit einer Sprungtabelle zugeordnet ist, die direkt durch den Schaltwert indexiert ist, oder
  • ein lookupswitch Befehl mit einer Tabelle von Schlüssel/Ziel-Paaren, die (in der Regel) können binär gesucht.

Siehe die JVM Specification #3.10.

+2

Dies gilt für 'javac' Compiler. Aber da es in der Frage ein "jit" -Tag gibt, könnte OP auch daran interessiert sein, wie das funktioniert, wenn der JIT-Compiler startet. Der HotSpot-Compiler behandelt ähnlich wie "tablewitch" und "lookupswitch" und ** berücksichtigt dies ** Frequenzstatistiken **, die während der Profilerstellungsphase gesammelt wurden. – apangin

Verwandte Themen