IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

tableau d 'objets


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Par défaut tableau d 'objets
    Bonjour,

    pour un jeu, j'ai besoin de représenté une carte sous (grille de taille nxm). Chaque case peut avoir des caractéristiques différentes (type de terrain, joueurs présent sur la case). Si je crée un objet Case par case j'ai peur que cela prenne trop de ressources.

    Je voudrais savoir quel taille prends un objet minimal en mémoire.

    Et si il n'y aurait pas une meilleurs solutions que le tableau de Case ?

    @+
    trax

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Bonjour,

    La taille d'un objet est la somme de la taille de ses attributs.
    Pour savoir si sa pose probleme c'est facile.
    (somme de la taille des atributs * nbrDeCase maximales) ne doit pas depasser disons 30% de ta RAM.
    Bonne creation.

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Si tu étudies bien ton affaire, il n'y a pas de raison. Tu peux créer 100.000 cases, te faire une petite base de données pour les sauvegarder, etc.

    Et n'oublie pas cette petite maxime qui me plait beaucoup, et que j'ai trouvé ici en anglais , et (traduction libre) :
    1. N'optimisez pas.
    2. (Experts seulement) N'optimisez pas encore.
    Accroche toi ça au dessus de ton bureau, et commence tes cases !

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Citation Envoyé par gifffftane
    Si tu étudies bien ton affaire, il n'y a pas de raison. Tu peux créer 100.000 cases, te faire une petite base de données pour les sauvegarder, etc.

    Et n'oublie pas cette petite maxime qui me plait beaucoup, et que j'ai trouvé ici en anglais , et (traduction libre) :
    Accroche toi ça au dessus de ton bureau, et commence tes cases !
    Hummm, optimiser à une signification bien large.
    - Optimiser au sens "utiliser un algorithme plus performant" ( modification des traitements, refontes de l'ensemble des classes ) est une bonne chose en java.
    - Optimiser au sens "penser assembleur" ( réservation minimal mémoire, penser au puissances de 2 dans les calculs etc. ), pour moi c'est de la connerie en java.
    Pour conclure, faut voir de quelle genre d'optimisation on parle : chercher à gagner un cycle processeur ( j'exagère ), ou chercher à gagner 90% de temps avec un meilleur algo.

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Oui, mais souvent, bien étudier son algo ne signifie rien d'autre que de gagner des cycles processeurs (ou pire, d'être générique).

    J'aime bien cette maxime, parce que - selon moi - elle pose la question : Mais si je ne dois pas optimiser, alors que puis-je faire pour améliorer mon code ?... Si, être expert en informatique, ce n'est pas optimiser, alors c'est quoi ?

    Ma réponse à moi est qu'il faut faire un code, des algos appropriés au service à rendre. L'optimisation, c'est simplement être en phase avec ce qu'il faut faire, un peu comme les systèmes temps réels.

    Par exemple, ici, on à 100.000 rectangles. Mais qui est susceptible de manipuler tout cela ? Certainement pas un humain. Donc, ici, il n'est pas approprié de les manipuler ensemble. Et on va essayer de répondre à la question : parmi les 100.000, lesquels seront effectivement manipulés ?

    On le voit, on se pose des questions qui n'ont plus rien à voir avec l'occupation mémoire des objets java, ni même sur les algorithmes, mais sur l'utilisation. (ici, c'est un humain, ce serait le même genre si l'utilisateur était une machine).

    Et être expert en informatique, je pense que c'est ça : être capable de poser les bonnes questions aux utilisateurs, de façon à leur fournir un système en phase avec ce qui leur est utile.

    Voilà pourquoi il me semble qu'il faut garder cette maxime dans un coin.

  6. #6
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Il faut savoir qu'en Java, un int est codé par exemple sur 4 octets. Si ton objet Case possède 50 attributs de type int, il ne prendra que 200 octets en mémoire, ce qui est très peu. Tu peux créer 10 000 objets Case, cela fera en tout 2 millions d'octets, c'est-à-dire approximativement 2 Mo, ce qui est raisonnable (Les machines actuelles sont de l'ordre du Go).

    Quant au tableau de Case, il ne prend presque aucune ressource en mémoire pisqu'il s'agit juste d'une liste e références (des adresses) vers des objets.

    Pas de souci, tu ne devrais commencer à t'occuper de l'allocation mémoire quand tu as un StackOverflow...

  7. #7
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Citation Envoyé par gifffftane
    ...
    Entièrement d'accord avec toi mais le type d'obtimisation doit se faire en fonction du contexte.
    Sinon pour revenir à la question principale, le tableau est une bonne solution. Maintenant va falloir voir comment tu utilises ce tableau : n'y a-t-il pas des éléments similaires redondant ? si ce sont des images, il a plusieurs moyen de stocker les images etc...

Discussions similaires

  1. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45
  2. Tableau d'objets
    Par moulefrite dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 14h14
  3. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo