Frage

In C, kann ich ein Register für eine Variable zuweisen, zum Beispiel:

register int i = 0;

Ich bin mir bewusst, dass Java eine interpretierte Sprache ist, und ist viele, viele Abstraktionen von der CPU entfernt.

Gibt es einen Mechanismus zur Verfügung Anfrage zu glätten (und wenn die Architektur es nicht zulässt, dass, so was), dass mein Variable in einem Register bleibt statt mich zu bewegen oder Hauptspeicher zwischengespeichert werden?

Ich glaube nicht, gibt es eine Möglichkeit, aber ich habe angenehm überrascht vor.

Danke,

War es hilfreich?

Lösung

Nein, es gibt keine Möglichkeit, dies in Java zu beantragen. Allerdings gibt es einige Dinge, die Sie, dass aus einem Register verhindert tun können verwendet werden, wie zum Beispiel das volatile Modifikator auf eine Membervariable angewendet wird.

Andere Tipps

register in C stellen keine Variable zu registrieren. Es gibt einfach den Compiler den Hinweis, dass es wahrscheinlich wäre gut, es in ein Register zu setzen.

In Java gibt es keine Entsprechung.

Wenn es genug, um in kurzem verwendet wird, dass es ein Register int machen würde sich lohnen, dann sollten die Hotspot-Compiler in der Lage sein, um das herauszufinden selbst.

In der Tat sollten die Hotspot-Compiler in der Lage, einen besseren Job als die C / C ++ Compiler zu tun, weil es mehr Informationen hat, mit zu arbeiten. C / C ++ Compiler hat zu erraten; HotSpot messen kann.

Es gibt kein Äquivalent in Java. Auch in C gibt es keine Garantie, dass der Variable in einem Register gespeichert werden und Compiler sind frei, es zu ignorieren.

In Java wird das Verfahren interpretiert werden, bis der Hotspot JIT bestimmt heuristisch, dass es kompiliert werden muss. Für kompilierten Code verwendet es einen färbende Algorithmus Variablen und temporäre Werte zu Registern zugewiesen werden, oder zum / vom RAM im Fall von Überlauf-Register schreiben.

  

Ich bin mir bewusst, dass Java eine interpretierte ist   Sprache und ist viele, viele   Abstraktionen von der CPU entfernt.

Sie beantwortet so ziemlich Ihre eigene Frage dort: -)

Aber im Ernst, im Allgemeinen, schreiben Sie Ihren Code so klar und einfach wie möglich, und die JVM wird tun, was es Ihren Code richtig zu behandeln.

können Sie erstellen eine Anmerkung namens @register aber die JVM wird es auf jeden Fall ignorieren. z.

@register int i = 0;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top