2017-04-13 3 views
1

J'ai essayé de chercher ma réponse mais je n'arrive pas à en trouver une. J'étais curieux de savoir si Java et/ou d'autres langages modernes optimisaient la réplication des objets en effectuant une sorte de mapping virtuel pour les méthodes. Cela semblerait être un gâchis si à chaque fois qu'une nouvelle instance d'un objet est créée, elle copierait les méthodes qui lui sont associées plutôt que de les mettre en correspondance avec un seul endroit en mémoire.Lors de la création de plusieurs instances du même objet, Java réplique-t-il les implémentations de la méthode?

Je peux voir certains cas, tels que le polymorphisme, où cela pourrait ne pas fonctionner.

Cela peut être plus d'une question de base, mais je suis très curieux de savoir comment le compilateur gère cela.

Merci!

+3

Les méthodes sont associées à la classe et non à une instance. Voir le commentaire en italique à [l'item 2.7 du chapitre de la spécification JVM] (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.7) – RealSkeptic

+0

@RealSkeptic Merci. À votre santé. – user0000001

Répondre

1

à proprement parler, ce ne sont pas votre entreprise:

La machine virtuelle Java ne commande pas de structure interne particulière pour les objets.

(JVM Spec)

Donc, si vous deviez écrire votre propre machine virtuelle Java, et pour une raison quelconque vous avez choisi de mettre une copie du code de la méthode dans chaque représentation en mémoire d'un objet, vous seriez libre de le faire. Cependant, il existe différents aspects de la définition du langage, ce qui signifie qu'il n'est pas possible que deux méthodes de la même classe aient des méthodes différentes, même s'il s'agit de classes internes non statiques, de classes dynamiques.

Par conséquent, vous avez raison de dire qu'il serait inutile de dupliquer le code de méthode pour chaque instance, et aucune implémentation sérieuse de Java ne le fait.