Bonjour à tous lors de la rédaction d'une liste de liste de matrice, je comprends qu'il est important de définir Toutefois, si ma liste Array est une liste Primitive Int Array (sauvegardée par un SIMILAIRE, pour une liste de matrices de caractères primitifs (sauvegardés par un est un éventail d'INT rempli de zéros éventuellement em> moins d'occupation de mémoire que d'une matrice de longueur égale remplie de valeurs entières car le temps d'exécution pourrait faire élément (x) code> sur null quand il est supprimé (au lieu de simplement
Quantité - = 1 code >) afin d'empêcher les fuites de mémoire. P>
int [] code>), il est logique de le définir à 0? p>
Char [] code>), lorsque vous removerange () est appelé, il est logique de remplir cette plage avec
\ u0000 < / code>? Ou est-ce totalement bien simplement pour mettre à jour la longueur code> et les pointeurs sans modifier le tableau de support? P>
6 Réponses :
est une matrice d'INT remplie de zéros éventuellement moins occupant la mémoire qu'un réseau de longueur égale rempli de valeurs entières? p> blockQuote>
En supposant dans les deux cas, nous traitons avec un
int [] code> - non. Deux tableaux du même type et la même longueur occuperont toujours la même quantité de mémoire. P>
Il n'y a pas besoin em> pour écraser vos éléments de tableau "maintenant vides" avec 0. Cela ne ferait aucun mal (au-delà d'un minuscule avantage de performance) et peut même rendre les choses plus simples lors du débogage, mais Vous n'avez pas besoin de. p>
Non, il n'est pas nécessaire de le faire avec des types primitifs (c'est-à-dire la définir à 0) car la seule raison pour laquelle les «machines à sous» seules sont explicitement annulées sont explicitement annulées pour empêcher les fausses références qui se vissaient ainsi de la collecte des ordures. P>
Vous ne pouvez pas avoir de ArrayList
Je suis à peu près sûr qu'il sait que et veut créer sa propre catégorie code> classique code> de classe comme intarraylist code>.
+ Sanjay - Je ne suis pas si sûr. Quoi qu'il en soit, je ne suis pas censé répondre à ce que quelqu'un aurait pu vouloir dire, mais pour répondre à ce qu'il a demandé.
Je l'ai lu alors qu'il met en œuvre sa propre liste de matrices (sans l'utilisation de ArrayList).
@ Wmorrison365 Oui Vous avez raison, je parle d'une liste de la liste des intensions primitives et non d'une liste Java.Util.ArrayList
Les primitives et les références occupent toujours la même quantité d'espace. P>
... Lorsque vous écrivez une liste de liste de matrice, je comprends qu'il est important de définir
élément (x) code> sur
null code> quand il est supprimé (au lieu de simplement
Quantité - = 1 code>) afin d'éviter les fuites de mémoire. P> blockQuote>
Ce n'est pas vrai. Réglage des variables sur
NULL code> n'est pas quelque chose qui est toujours nécessaire et ne pas le faire ne signifie pas que vous avez une fuite de mémoire. P>
Toutefois, si ma liste de tableau est une liste Primitive Int Array, a-t-il un sens de la définir à 0? p> blockQuote>
Non, pour les primitives, cela n'a pas d'importance du tout, 0 ou
\ u0000 code> (pour un caractère) n'est qu'une valeur comme une autre valeur. Cela ne prend pas moins d'espace. P>
IT est I> nécessaire si vous implémentez un TRAYLIST code> -itant type. Si j'ajoute un élément puis supprimez cet élément de la liste, je ne veux pas que la référence soit suspendue dans la liste sans raison.
Si vous gérez votre propre mémoire, vous devez gérer les objets annulifiants non utilisés. Sinon, le GC le ramasse s'il n'y a plus de références à cet objet (à une heure non spécifiée).
@Jonskeet Oui, c'est probablement une bonne idée si vous implémentez votre propre liste code>. Beaucoup de gens pensent bien que définir des variables sur
NULL code> en général est une bonne idée (sans comprendre exactement pourquoi). À mon avis, vous ne devriez pas faire les choses simplement parce que vous avez une vague idée que c'est "bon" - le faites seulement si vous comprenez pourquoi.
@Jesper: True - mais dans ce cas, la question Etat i> le contexte.
Non, vous devez annuler l'emplacement d'objet dans la matrice pour empêcher la fuite. Si l'objet est toujours référencé par votre tableau, il ne peut pas être gc'd - donc la future que vous vous référez à. P>
Les primitives d'autre part sont allouées sur la pile de toute façon, pas le tas, ce n'est donc pas gc'd de toute façon. Les primitives d'instance varièrent des classes sont stockées comme champs de l'objet correspondant et nettoyés lorsque l'objet est GC'D. P>
En outre, les JLS indiquent que la taille d'une primitive est spécifique à la machine virtuelle VM, mais la plupart (tous?) VMS prennent actuellement en charge les INT de 4Byte. Voir le JLS pour plus d'informations: p>
Si je me souviens bien, la réponse à celle-ci est un peu illogique. Je laisserai quelqu'un plus intelligent à faire l'explication juste parce que ma mémoire est trop brumeuse sur le sujet.
Il est très tentant de confirmer faussement que l'INT [] obtient le plus grand nombre de chiffres. Certaines personnes n'ont pas de modèle de la façon dont un ordinateur fonctionne du tout?
@Ingo je pensais que des optimisations pourraient être faites s'ils étaient tous de la même valeur (c'est-à-dire 0)
@Pacerier en fait, dans la plupart des noyaux Linux,
calloc code> optimise que, comme il a une page séparée de tous les autres qui est toujours définie sur 0. Lorsque vous essayez d'y écrire la première fois, Modifie la page que vous essayez d'écrire à une page nouvellement glissée en mémoire, pour économiser sur ces ressources précieuses. Cependant, je ne pense pas que rien de tel est disponible en Java.
C'est théoriquement possible et je me souviens vaguement des systèmes qui ont tenté ce genre de chose. (Certainement APL le fait, mais il est dactylographié de manière dynamique.) Mais je ne pense pas que tout système de production Java ou C-Thare C - le fait (autre que le swizzle de stockage mentionné par Richard).
(Et il convient de noter qu'il convient d'éviter de passer des modifications inutiles au stockage (telles que la zéro espace inutilisé), car cette "saleté" la cache inutilement et la gestion de cache est d'environ 50% de l'optimisation de la performance Java.)
@Hotlicks merci pour le conseil :)