Domanda

In C, posso allocare un registro per una variabile, ad esempio:

register int i = 0;

Sono consapevole del fatto che Java è un linguaggio interpretato, ed è molte molte astrazioni di distanza dalla CPU.

Esiste un meccanismo a disposizione per uniformare richiesta (e se l'architettura non lo consente, così che cosa), che la mia variabile rimane in un registro invece di muoversi da memorizzare nella cache o la memoria principale?

Non credo che ci sia alcun modo, ma sono stato piacevolmente sorpreso prima.

Grazie,

È stato utile?

Soluzione

No, non c'è modo di chiedere questo in Java. Tuttavia, ci sono alcune cose che si possono fare che impedirà un registro di essere utilizzati, come l'applicazione il modificatore volatile ad una variabile membro.

Altri suggerimenti

register in C non mette una variabile per la registrazione. Si dà semplicemente il compilatore il suggerimento, che probabilmente sarebbe bene mettere in un registro.

In Java non v'è alcun equivalente.

Se è usato abbastanza in un breve spazio che lo rende un int registro sarebbe utile, quindi il compilatore hotspot dovrebbe essere in grado di capirlo se stessa.

In realtà, il compilatore hotspot dovrebbe essere in grado di fare un lavoro migliore rispetto al compilatore C / C ++, perché ha più informazioni con cui lavorare. C / C ++ compilatori devono indovinare; HotSpot può misurare.

Non c'è alcun equivalente in Java. Anche in C non v'è alcuna garanzia che la variabile verrà memorizzato in un registro e compilatori sono liberi di ignorarlo.

In Java, il metodo viene interpretato fino alla squadra hotspot determina euristicamente che deve essere compilato. Per codice compilato utilizza un algoritmo di colorazione per assegnare le variabili e valori temporanei ai registri, o scrivere da / RAM nel caso di overflow registro.

  

Sono consapevole del fatto che Java è un interpretato   il linguaggio, ed è molti molti   astrazioni di distanza dalla CPU.

È praticamente risposto alla tua domanda c'è: -)

Ma sul serio, in generale, scrivere il codice nel modo più chiaro e semplice possibile, e la JVM farà il possibile per trattare il vostro codice di destra.

È possibile creare un'annotazione chiamato @register ma la JVM sarà sicuramente ignorarlo. per es.

@register int i = 0;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top