Qual è la differenza tra classe astratta e interfaccia in termini di archiviazione in JVM. Per essere più preciso in cui JVM memorizza le interfacce nella sua memoria?Qual è la differenza tra classe astratta e interfaccia in termini di archiviazione in JVM
risposta
Avviso: Come menzionato da @assylias, questa meccanica è specifica per Oracle HotSpot JVM.
Prima Java8
Tutte le informazioni sono memorizzate in meta PermGen, per entrambe le classi astratte e le interfacce. Le informazioni sulla meta includono solo informazioni specifiche della classe (quali campi ha, cosa è padre, ecc.).
L'interfaccia può contenere solo i campi public static final
, quindi questa informazione sul campo è memorizzata in PermGen.
La classe astratta può avere campi sia statici che non statici. Tuttavia, non vi è alcuna differenza in termini di meta-informazioni, quindi è anche memorizzata in PermGen. D'altra parte, le istanze di oggetti reali sono memorizzate in Heap per i campi sia statici che non statici.
vedere l'esempio
public class MyClass {
public static final Calendar calendar = Calendar.getInstance();
private Date myDate = new Date();
}
informazioni Campo su calendar
e myDate
è memorizzato in PermGen e casi reali di oggetti vengono memorizzati in Heap.
In Java8 PermGen è stato spostato all'interno dello spazio Mucchio, nella cosiddetta Metaspace, in modo che non si veda più java.lang.OutOfMemoryError: PermGen space
. Tuttavia, la separazione concettuale tra meta-informazione e memoria di allocazione degli oggetti è ancora presente.
Rivedere anche la quotazione delle specifiche @AlexTaylor.
Il method area (logicamente parte del mucchio) memorizza un sacco di informazioni su classi e interfacce nella JVM:
... Strutture negozi per-classe, come il run-time pool di costanti, campo e dati di metodo e il codice per metodi e costruttori, inclusi i metodi speciali (§2.9) utilizzati nell'inizializzazione di classe e istanza e l'inizializzazione dell'interfaccia.
Tuttavia:
Questa specificazione non mandato l'ubicazione della zona di metodo o i criteri utilizzati per gestire il codice compilato.
Ciò significa che una particolare JVM è libera di memorizzarli ovunque sia opportuno.
- 1. Qual è la differenza tra una classe astratta e un'interfaccia?
- 2. In Typescript, qual è la differenza tra tipo e interfaccia?
- 3. Differenza tra interfaccia, classe astratta, classe sigillata, classe statica e classe parziale in C#?
- 4. Differenza tra classe astratta e Trait
- 5. Qual è la differenza tra JRE e JVM?
- 6. Classe astratta o interfaccia. Qual è il modo corretto?
- 7. Qual è la differenza tra "declare classe" e "interfaccia" in TypeScript
- 8. Qual è la differenza tra oggetti e classi in C#?
- 9. Qual è la differenza tra una classe astratta e una statica?
- 10. php: quando utilizzare la classe astratta e di interfaccia?
- 11. Qual è la differenza tra l'albero di ricerca Array e Binary in termini di efficienza?
- 12. Qual è la differenza tra == e =: = in Erlang se usato con termini in generale?
- 13. Servizi Java RESTful - Qual è la differenza tra QueryParam e PathParam in termini di utilizzo?
- 14. Qual è la differenza tra UTF8/UTF16 e Base64 in termini di codifica
- 15. qual è la differenza tra doGet() e doPost() in termini di flusso?
- 16. stesso metodo di interfaccia e classe astratta
- 17. Differenza tra JVM e HotSpot?
- 18. Qual è la differenza tra cogliere e raccogliere in Rails?
- 19. Qual è la differenza tra memset e memcpy in C
- 20. Classe, oggetto, entità: qual è la differenza?
- 21. Qual è la differenza tra Boxing e AutoBoxing in Java?
- 22. Qual è la differenza tra MessageListener e Consumer in JMS?
- 23. Quindi qual è la differenza tra distribuito e in cluster?
- 24. Qual è la differenza tra PreserveReferencesHandling e ReferenceLoopHandling in Json.Net?
- 25. Qual è la differenza tra `##` e `hashCode`?
- 26. Riguardo a Promises/A + Specification, qual è la differenza tra i termini "thenable" e "promise"?
- 27. Differenza tra Archiviazione sessione, Archiviazione locale e Cookie in AngularJS
- 28. Qual è la differenza tra URI e Uri classe
- 29. F #: In termini reali, qual è la differenza tra una "stringa" e una "opzione stringa"?
- 30. Qual è la differenza tra l'interfaccia e @interface in java?
Heap, poiché le interfacce esistono solo come implementazioni nelle classi e sono nell'heap. – Hiru
Questo è puramente informativo o stai cercando di ottenere qualcosa? –
Dipende dalla JVM perché le specifiche JVM non dicono come dovrebbe essere organizzata la memoria ... – assylias