Begrenzt das Einchecken in Java

9

"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.

    
Jothsna Nalla 17.12.2010, 10:14
quelle

2 Antworten

4

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.

    
darioo 17.12.2010 10:21
quelle
1

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. "

    
Mark Mayo 17.12.2010 10:21
quelle