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

Java Discussion :

Limite du buffer


Sujet :

Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut Limite du buffer
    Bonjour à tous,

    j'utilise un buffer (FileInputStream et FileOutputStream) pour charger un fichier.
    Je met dans un String[] (donc un tableau de String) phrase par phrase.
    Pour l'instant, avec un fichier de 50 pages, ca fonctionne, mais je voudrait savoir si il y a une limite et quelle est-elle?
    Je ne sais pas à priori si c'est le stream qui prend de la place ou le String[].
    Je suppose que les 2 vont dans la Ram ou je ne sais quoi? JE voudrais donc avoir des eclaircissements la dessus.

    J'utilise Eclipse et donc si il y a un moyen de voir la memoire consommée en mode debeugage je suis preneur aussi.

    MERCI a tous.

  2. #2
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    La limite que je vois c'est la mémoire. Je ne pense pas que tu dépasseras le nombre d'élément que peut contenir un tableau. Je sais qu'il y a des pluggins Eclipse qui permette de voir la taille mémoire mais je n'ai pas les noms en tête. Recherche sur google je ne pense pas que celà soit difficile à trouver.

    A+
    Hydraland

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Pour voir la mémoire globale consommée par ton appli, il suffit de mettre après le breakpoint en mode debug un appel à la méthode getUsedMem() que voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public long getFreeMem() { return Runtime.getRuntime().freeMemory(); }
    public long getTotalMem() { return Runtime.getRuntime().totalMemory(); }
    public long getMaxMem() { return Runtime.getRuntime().maxMemory(); }
    public long getUsedMem() { return getTotalMem() - getFreeMem(); }
    Par contre, tu n'obtiendras pas le détail de l'utilisation mémoire des différents objets. Cela, tu peux l'obtenir à l'aide du logiciel JProbe, qui est très efficace... mais également très coûteux!
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    MERCI a vous deux

    J'aime bien le "Tres couteux"

    J'attends d'autres propositions

    J'aimerais en effet regarder la memoire que mon tableau string consomme (et l'evolution de mon buffer)

  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
    À ma connaissance, les StringBuffer utilisent un tableau pour conserver leurs données. Comme un tableau se dimensionne par un entier, par construction, la taille maximum d'un StringBuffer est donc de Integer.MAX_VALUE.

    Mais c'est une limite théorique... Pratiquement, j'en sais rien.

    De plus, si vraiment tu t'inquiètes des relations entre buffer et mémoire, alors tu auras meilleurs compte à passer par les java.nio.Buffer. Mais il faut que le jeu en vaille la chandelle.

  6. #6
    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
    À ma connaissance, les StringBuffer utilisent un tableau pour conserver leurs données. Comme un tableau se dimensionne par un entier, par construction, la taille maximum d'un StringBuffer est donc de Integer.MAX_VALUE.

    Mais c'est une limite théorique... Pratiquement, j'en sais rien.

    De plus, si vraiment tu t'inquiètes des relations entre buffer et mémoire, alors tu auras meilleurs compte à passer par les java.nio.Buffer. Mais il faut que le jeu en vaille la chandelle.
    Je dirais même plus : java.nio.MappedByteBuffer qui représente un buffer de byte mais qui n'est pas chargé en mémoire. Le système d'exploitation établi la liason directement entre les accès à ce buffer et le fichier physique, cela en utilisant le cache système des filesystems.
    Donc classe très performante dans le cadre d'accès à des fichiers volumineux.

    Cela-dit, s'il s'agit de fichiers texte, il faudra bien à un moment ou à un autre convertir les octets ( byte ) en caractères ( selon l'encodage utilisé ), et la, meilleure manière pour ne fais exploser la mémoire est de faire une lecture blocs par blocs comme avec RandomAccessFile ou FileReader.

    D'ailleur, si quelqun a une astuce pour utiliser un genre de "MappedCharBuffer" ( même en utilisant l'encodage par défaut de l'OS ), je suis preneur...

  7. #7
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    La taille d'un String[] doit-être de 2*length en octets à ce qu'il me semble (plus une taille fixe par objet de l'ordre de 8o, à vérifier).

    Je ne pense pas que les Stream explose la mémoire car ils doivent travailler en flux. C'est tout mettre dans des String qui va faire mal car 100Mo de texte vont prendre... 100Mo (ou pire si c'était de l'ascii). Si les fichiers deviennent trop gros pour tenir en mémoire il faudra les découper ou travailler en flux... si c'est possible.

    Pour profiler sans se ruiner il y a TPTP qui est un plug-in Eclipse mais je n'en suis pas trop fan. Je viens de découvrir http://profiler.netbeans.org/ et j'adorre, surtout pour le profiling mémoire. Et le bon point est que le profileur peut s'attacher à un prog même si celui-ci est lancé depuis Eclipse

    A part
    ça j'ai aussi entendu du bien (mais pas encore testé) java.nio

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/02/2015, 19h37
  2. limite de buffer
    Par Sonya89 dans le forum Général Java
    Réponses: 4
    Dernier message: 04/05/2013, 23h35
  3. Limitation buffer commande tail
    Par ben_maury dans le forum Unix
    Réponses: 1
    Dernier message: 08/10/2009, 14h24
  4. Réponses: 5
    Dernier message: 29/01/2008, 16h17
  5. [Configuration] nombre de scripts limité avec buffers de sorties
    Par alcor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 08/04/2006, 22h59

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