Si j'ai un objet o code> avec une méthode gigantesque
f () code>, et je charge 10000 exemples de
o code> dans la mémoire. Sont 10000 exemples de
f () code> chargé dans la mémoire aussi? Si tel est le cas, cela signifie-t-il que je sauverais la mémoire en faisant cette fonction statique si possible? P>
4 Réponses :
non. Il n'y a qu'une seule instance de la méthode chargée. P>
La méthode d'instance n'est qu'un modèle et est défini dans une classe (pas dans chaque instance). Vous ne sauveriez pas la mémoire en le rendant statique. P>
Les méthodes d'instance sont chargées dans la zone de méthode en JVM. Il est chargé une fois, mais il y aura beaucoup de pile pour chaque appel que vous faites à F (), pour garder une trace de leurs propres valeurs variables locales. p>
Faites-vous savoir si vous vous trompez? Si vous n'êtes pas sûr, ne répondez pas à la question.
Il est important de noter que l'espace de pile de la méthode n'est utilisé que pendant un appel. Il n'y a pas 10 000 pièces d'empilement utilisés à tout moment parce que vous avez 10 000 instances créées.
@Djclayworth oui c'est vrai. Lorsqu'une méthode est terminée, l'espace de pile est supprimé .Cominez-vous lors de la récupération?
Je pourrais avoir tort, mais ne sont pas des cours chargés une fois par chaîne de chargement de classe, plutôt qu'une fois par jvm? Donc, si des méthodes: une fois par chaîne de classeur de classe
non. Les méthodes ne font pas partie des cas; ils font partie des cours. Il n'y aurait pas de point de répéter le code pour chaque instance (car il ne varierait jamais) de sorte que la mise en œuvre est tout simplement plus intelligente que celle-là. P>