Hai provato a compilarlo e a confrontare il codice byte? Ecco i miei risultati. Per:
public class Example {
public static void main(String[] args) {
System.out.println("Hello world!");
}
private static class A {
A(){}
}
}
È possibile che questo produce i seguenti file * .class:
-rw-r--r-- 1 michaelsafyan staff 238 Feb 10 00:11 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:11 Example.class
Ora, se mi trasferisco i file di classe, eliminare il modificatore private
, e ricompilare, ottengo:
-rw-r--r-- 1 michaelsafyan staff 238 Feb 10 00:15 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:15 Example.class
Se si guarda il VM Spec on class files, vedrete che c'è un campo di bit a dimensione costante per specificare i modificatori di accesso, quindi non dovrebbe essere una sorpresa che i file generati siano gli stessi dimensione.
In breve, i modificatori di accesso non influiscono sulla dimensione del codice byte generato (non dovrebbe inoltre avere alcun impatto sulle prestazioni). Dovresti usare il modificatore di accesso che ha più senso.
Devo anche aggiungere che c'è una leggera differenza se si modifica la classe interna dall'essere dichiarata static
per non essere dichiarata static
, in quanto implica un campo aggiuntivo che fa riferimento alla classe esterna. Ciò richiederà un po 'più di memoria rispetto a quando dichiarassi la classe interna static
, ma sarai pazzo per ottimizzare per questo (usa static
dove ha senso, e dove hai bisogno che sia non statico, rendilo non statico , ma non convogliare il tuo progetto solo per salvare un puntatore di memoria qui o là).
fonte
2011-02-10 05:24:50
possibile duplicato di [Are Inner Classes lightweight?] (Http://stackoverflow.com/questions/4812464/are-inner-classes-lightweight) – templatetypedef
Mi chiedo se la visibilità ridotta venga sfruttata in qualsiasi modo da Hotspot. Inoltre, mi chiedo se i compilatori java possano utilizzare questo fatto per escludere la classe da considerazioni al di fuori del suo ambito di visibilità. Domanda interessante, ma non penso ci sia alcun beneficio pratico. – Ron
@Ron: il compilatore/IDE controllerà sicuramente la visibilità e renderà errori di compilazione o rimuoverlo dalla funzione di completamento automatico. Mi sto solo chiedendo se qualcosa sta accadendo in fase di runtime. – Thilo