Recentemente ho imbattuto in una classe che ha avuto il seguente campo dichiarato:differenze di prestazioni tra i campi primitivi finali statici e non statici in Java
private final int period = 1000;
In questo caso particolare, l'autore aveva inteso per essere anche statico e dato che il valore non poteva essere modificato in alcun punto, non esisteva una vera ragione funzionale per non dichiararlo statico, ma mi chiedevo come Java tratta le primitive statiche finali e finali.
In particolare:
1) Come sono memorizzati primitive statici finali? Sono semplicemente compilati direttamente nelle espressioni in cui vengono utilizzati?
2) Se sono effettivamente allocati in memoria, ogni istanza della classe contenente deve mantenere un riferimento a tale posizione? (nel qual caso, per le primitive inferiori a 4 byte, ogni istanza della classe sarebbe effettivamente più grande di se includesse la primitiva direttamente come nel caso non statico)
3) I compilatori ora sono intelligenti abbastanza da determinare che in casi come quello sopra, la variabile è 'staticamente efficace' in quanto sarebbe impossibile avere istanze diverse contenenti valori diversi e quindi ottimizzarla in modo simile a una statica finale?
Re: # 3, in realtà non mi aspettavo realmente le differenze di prestazioni in termini di velocità, ma non sapevo se il mio ottimizzasse non memorizzandolo in base all'istanza i campi finali statici attuali. Con il senno di poi, la differenza di prestazioni è probabilmente un termine improprio. Grazie per il chiarimento – Dusty