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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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...

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