10
votes

Existe-t-il une mémoire et une performance traitées de l'utilisation du modèle de constructeur de Bloch?

Quelle est la mémoire et l'utilisation de la performance par rapport à la création d'un objet avec un constructeur?

L'utilisation ici consiste à créer un SET ou list qui peut contenir millions de participations et je suis concerné par les frais généraux de l'utilisation de Bloch's Builder Modèle. Je l'ai utilisé dans le passé, mais jamais dans cette grande portée.

Référence: Item 2: Considérez un constructeur face à de nombreux paramètres de constructeur < / EM> , réimprimé dans Création et détruire des objets Java: Partie 1 , extrait de Efficace Java Deuxième édition par Joshua Bloch.


4 commentaires

Pouvez-vous s'il vous plaît ajouter un lien vers le modèle Builder de Bloch? (C'est-à-dire la description de Bloch d'origine)


Vous pouvez trouver le modèle Builder de Bloch dans le livre Java efficace ou @ rwhasen.blogspot.com/2007/07/...


@chburd: J'ai également remarqué ce premier lien dans Google, mais j'ai des doutes que c'est la description originale de Bloch.


@trashgod, merci pour le lien


3 Réponses :


7
votes

Vous avez le constructeur supplémentaire-objet, qui est rejeté après la création de l'objet. Vous pouvez donc avoir un impact sur l'utilisation et la vitesse de la mémoire. Mais le Java-VM optimise très fortement, en particulier le serveur-VM (Java -server), de sorte que le VM peut optimiser complètement le constructeur. Donc, ma suggestion est que vous devriez mesurer l'impact réel (comme toujours si vous vous souciez de la performance) et décidez si l'impact est trop gros.


1 commentaires

+1, c'est un test non trivial de construire, mais je ferai. Je n'ai aucun contrôle sur ce que JVM est utilisé cependant, alors je cherchais des généralités.



3
votes

Il est difficile de dire à votre description initiale, mais si vous êtes préoccupé par la transmission d'une collection avec une ~ million d'entrées à un constructeur vs à un constructeur, puis le coût d'une autre ( objet de courte durée) vaut à peine la peine de discuter.


2 commentaires

Je pense qu'il crée les millions d'objets avec le modèle de constructeur. Cela signifie pour chaque million d'objets et un objet de constructeur temporaire supplémentaire.


Il pourrait probablement simplement ajouter une méthode .Clear () ou quelque chose au constructeur chaque itération pour vider son contenu.



1
votes

Le coût est négligeable depuis que la référence du générateur peut être recueillie immédiatement après la construction de l'objet.

L'impact de la création de 1M d'objets supplémentaires doit être inférieur à 10 dans toutes les circonstances.


3 commentaires

En fait, j'attendrais moins de 1s, même sur un netbook moyen ou un téléphone intelligent de classe supérieure.


@sfusseneger: Yeap, j'ai créé des objets 1M dans une simple boucle et cela m'a fallu environ 400 ms ... Je pense que 10 s devraient couvrir tous les cas, mais je suis d'accord avec vous.


Ce n'est probablement pas un bon test car il prend le JVM un peu de temps pour se réchauffer et optimiser. Le code fonctionnera un peu plus lentement pendant qu'il est optimisé.