2010-07-03 6 views
1

dire que j'instancier 100 000 vecteurscollections Java consommation de mémoire

a[0..100k] = new Vector<Integer>(); 

Si je fais

a[0..100k] = new Vector<Integer>(1); 

Prendront-ils moins de mémoire? C'est ignorer si elles ont des choses en eux et les frais généraux de les étendre quand il doit y avoir plus d'un élément.

+0

Je suis surpris que le code ci-dessus compile même – MAK

+0

C'était juste ma tentative de code pseudo-pseudo. – Recct

+1

Le vecteur est si java1.2. utiliser quelque chose de courant. –

Répondre

2

Lorsque vous créez un Vector, vous spécifiez la taille que vous voulez qu'il ait au début ou laissez une valeur par défaut. Mais il convient de noter que, dans tous les cas, tout ce qui est stocké dans un Vector est juste un tas de références, qui prennent vraiment peu de place par rapport aux objets qu'ils pointent réellement. Alors oui, vous économiserez initialement la place, mais seulement par la quantité qui est égale à la différence entre la taille par défaut et la multipliée par la taille d'une variable de référence. Si vous créez une très grande quantité de vecteurs comme dans votre cas, la taille initiale est importante.

2

Eh bien, en quelque sorte oui. IIRC Vector initialise en interne 16 éléments par défaut, ce qui signifie qu'en raison de l'alignement des octets et d'autres choses effectuées par VM sous-jacente, vous économiserez une quantité considérable de mémoire initialement. Mais qu'essayez-vous d'accomplir?

1

Oui, ce sera le cas. Par défaut, Vector alloue de l'espace pour 10 éléments.

Vector() Construit un vecteur vide de sorte que son réseau de données interne a une taille 10 et son incrément de capacité standard est zero.increment est égal à zéro.

Par conséquent, il réserve de la mémoire pour 10 références de mémoire. Cela étant dit, dans les situations de la vie réelle, cela est rarement une préoccupation. Si vous générez vraiment 100,000 vecteurs, vous devez repenser votre designincrement est zéro.

2

Oui, ils le feront. Mettre en "tailles initiales" raisonnables pour les collections est l'une des premières choses que je fais quand je suis confronté à un besoin d'améliorer radicalement la consommation de mémoire de mon programme.

8

Selon le Javadoc, la capacité par défaut d'un vecteur est 10, donc je vous attendre à prendre plus de mémoire qu'un vecteur de la capacité 1.

Dans la pratique, vous devriez probablement use an ArrayList à moins que vous devez travailler avec une autre API qui nécessite des vecteurs.

+1

Salut, oui je donnais plutôt un exemple, mais noté! – Recct

Questions connexes