2017-08-14 4 views
1

J'ai lu beaucoup de choses sur l'utilisation de la mémoire dans Java. Mes questions pointent vers la fabrication de jeux.Utilisation de la mémoire et collecte des ordures en Java

Chaque image J'appellerai des méthodes jusqu'à 500 fois pendant que je crée un arbre binaire. Chaque noeud appellera une fonction et créera 10 variables locales. Est-il préférable pour l'utilisation de la mémoire et/ou pour le garbage collector de créer une classe séparée qui contient toutes les variables nécessaires, l'instancie une fois et donne à chaque nœud une référence à cet objet? Si ma première question est réellement meilleure, est-ce plus "cher" d'appeler .getSomething() d'un objet séparé que de stocker la chose que vous voulez obtenir dans le propre objet?

Merci à tous!

+0

* Les variables locales * sont stockées dans la pile d'appels et sont libérées dès le retour de la méthode. Par conséquent, ils ne sont pas admissibles au GC. Bien sûr, cela ne dit rien sur les objets * référencés * par les variables locales, mais la façon dont ils sont affectés par GC dépend entièrement du nombre de références aux objets, donc impossible à dire sans plus d'informations. – Andreas

Répondre

0
  1. En règle générale, moins vous créez d'objets, moins vous aurez de pression sur le CPG. Donc, si chaque «nœud» de votre application doit accéder au même ensemble de valeurs, il est certainement préférable de placer ces valeurs dans un seul objet plutôt que de les allouer à chaque nœud encore et encore.
  2. Très probablement pas. Le compilateur JIT va très probablement intégrer ces appels s'ils sont souvent exécutés.

Comme mentionné dans le commentaire de votre question, les variables locales primitives seront alloués sur la pile et ne sont pas soumis à la collecte des ordures. Dans certains cas, même des objets peuvent être alloués sur la pile en raison de la technique d'analyse d'échappement du compilateur JIT. En règle générale, si vous voulez vraiment savoir comment se comporte votre application en termes de GC et d'allocations, vous devez la profiler (par exemple, avec le profil d'allocation de Java Flight Recorder) et consulter le journal GC. En outre, vous devez ajuster votre application en fonction de ces résultats plutôt que prématurément.