bounds-check-elimination

___ qstnhdr ___ Begrenzt das Einchecken in Java ___ answer4469535 ___

Nach dem googeln von "hotspot bounds checking", einem Paper mit dem Titel "Array Bounds Eliminierung für den Java HotSpot ™ Client entfernen Compiler " erscheint (als erstes Ergebnis) und gibt uns einen Einblick:

Zusammenfassung:

  

Immer wenn auf ein Array-Element zugegriffen wird,   Java Virtual Machines führen ein   Vergleichen Sie die Anweisung, um sicherzustellen, dass die   Indexwert ist innerhalb des gültigen   Grenzen. Dies reduziert die Ausführung   Geschwindigkeit von Java-Programmen. Array-Grenzen   Check Eliminierung identifiziert   Situationen, in denen solche Überprüfungen stattfinden   redundant und kann entfernt werden. Wir   Präsentieren Sie eine Überprüfung der Array-Grenzen   Eliminierungsalgorithmus für Java   HotSpot ™ VM basiert auf statischer Analyse   im Just-in-Time-Compiler.

     

Der Algorithmus arbeitet an einem Zwischenprodukt   Darstellung in statischem Single   Zuordnungsformular und pflegt   Bedingungen für Indexausdrücke. Es   entfernt Grenzen vollständig, wenn es möglich ist   bewiesen werden, dass sie niemals versagen.   Wann immer es möglich ist, bewegt es sich Grenzen   Auschecken von Schleifen. Die statische Nummer   der Schecks bleibt gleich, aber a   Überprüfen Sie innerhalb einer Schleife ist wahrscheinlich   häufiger ausgeführt. Wenn eine solche Überprüfung   fehlschlägt, fällt das ausführende Programm   Zurück zum interpretierten Modus, Vermeiden des   Problem, auf das eine Ausnahme geworfen wird   der falsche Ort.

     

Die Auswertung zeigt eine Beschleunigung nahe bei   das theoretische Maximum für die   wissenschaftliche SciMark-Benchmark-Suite   (Durchschnittlich 40%). Der Algorithmus auch   verbessert die Ausführungsgeschwindigkeit für die   SPECjvm98 Benchmark - Suite (2% auf   Durchschnitt, 12% maximal).

Mark Mayo hat das schön erklärt.

Unterste Zeile: Wenn Hotspot feststellt, dass es nicht notwendig ist, Grenzen für ein Array zu prüfen, sieht es dies als eine Möglichkeit, die Grenzen für dieses Array zu deaktivieren und somit die Leistung zu erhöhen.

    
___ tag123jvmhotspot ___ HotSpot ist die Java-Standardmaschine, die von den Oracle- und OpenJDK-Java-Laufzeitumgebungen verwendet wird. ___ tag123runtime ___ Runtime ist die Zeit, in der ein Programm läuft (ausgeführt wird) ___ answer4469537 ___

Nun, es funktioniert, indem es die Leistung des Programms ständig analysiert und nach "Hotspots" sucht, die häufig oder wiederholt ausgeführt werden können. Diese werden dann zur Optimierung für eine hochperformante Ausführung mit minimalem Overhead für weniger performancekritisches Code.

Wenn also in der Theorie einige Grenzen überprüft werden und es durch wiederholte und häufige Ausführung offensichtlich ist, dass es unmöglich ist, die Grenzen zu überschreiten, können Hotspots diese Prüfungen optimieren. Es bedeutet nicht, dass es unfehlbar ist, aber das könnte ein Grund sein, warum es passiert.

Aus einem Artikel aus dem Jahr 2007 von Würthinger et al.: "Immer wenn auf ein Array-Element zugegriffen wird, Java virtual Maschinen führen eine Vergleichsanweisung aus, um sicherzustellen, dass der Indexwert innerhalb der gültigen Grenzen liegt. Dies reduziert die Ausführungsgeschwindigkeit von Java-Programmen. Die Array-Grenzen-Prüfeliminierung identifiziert Situationen, in denen solche Prüfungen redundant sind und entfernt werden können Algorithmus für die Java HotSpot ™ VM basiert auf der statischen Analyse im Just-in-Time-Compiler. "

    
___ qstntxt ___

"Hotspot kann Grenzen in Java entfernen." Kann das bitte jemand erklären? Im Moment analysiere ich die Unterschiede zwischen C ++ und Java. Es ist keine Hausaufgabe und ich analysiere mein eigenes Interesse.

    
___ tag123boundcheckelimination ___ Die Überprüfung auf Bounds ist eine Compiler-Optimierung, die in Programmiersprachen oder Laufzeiten nützlich ist, die die Überprüfung von Bounds erzwingen. Dabei wird jeder Index in einem Array überprüft, um sicherzustellen, dass der Index innerhalb des definierten Bereichs liegt. Ihr Ziel besteht darin, zu erkennen, welche dieser Indizierungsoperationen zur Laufzeit nicht validiert werden müssen, und diese Überprüfungen zu eliminieren. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___
2
Antworten

Begrenzt das Einchecken in Java

"Hotspot kann Grenzen in Java entfernen." Kann das bitte jemand erklären? Im Moment analysiere ich die Unterschiede zwischen C ++ und Java. Es ist keine Hausaufgabe und ich analysiere mein eigenes Interesse.     
17.12.2010, 10:14