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

Android Discussion :

Maximun ArrayList<String> ?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Par défaut Maximun ArrayList<String> ?
    bonjour ,

    Juste pour savoir limit stokage ArrayList<String> ?

    J'utilise a mon code :
    Le but c'est pour faire un AutoCompleteTextView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    found_client   = (AutoCompleteTextView)findViewById(R.id.found_client);found_client.setTextColor(Color.BLACK);
    Et pour adapter found_client ( found_client.setAdapter(adapter)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void ajouter_client_list() 
    {
     cursor_cl.requery();	
     li=new ArrayList<String>();
     if(cursor_cl.moveToFirst()) 
    	          do{  
    	        	  li.add(cursor_cl.getString(10));  
    	        	} while(cursor_cl.moveToNext());
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.my_list_item,li);
      found_client.setAdapter(adapter);
    }

    Si avec le temps j'ai beaucoup des clients par exemple:

    Question 1: limit stokage ArrayList<String> ??

    Question 2: limit stokage a ma Clients.db(base de donnée)??(nbrs de lignes maximun?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour ce qui est d'une ArrayList (une liste qui utilise un tableau pour stocker les éléments qu'y sont mis), on peut voir dans le source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     /**
         * The maximum size of array to allocate.
         * Some VMs reserve some header words in an array.
         * Attempts to allocate larger arrays may result in
         * OutOfMemoryError: Requested array size exceeds VM limit
         */
        private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
    En regardant plus en détail le code de la classe ArrayList, on peut voir que si on ajoute un élément et que la taille du tableau de stockage doit être agrandie pour pouvoir le stocker, dès qu'on dépasse la valeur MAX_ARRAY_SIZE, on prend au maximum Integer.MAX_VALUE, au risque de provoquer une erreur de dépassement mémoire sur certaines JVM.

    Donc, en théorie, on peut avoir (2^31)−1 soit 2 147 483 647 éléments maximum dans une ArrayList, mais, à priori, on ne devrait pas dépasser 2 147 483 639 élèments pour être sur de ne pas avoir de problème.

    Attention, ensuite, tout dépend de la mémoire qu'occupe chacun des éléments que tu mets dans ton ArrayList : tu ne dépasseras pas forcément les capacités de l'ArrayList, mais tu peu facilement dépasser la mémoire allouée à ton application.

    Pour ce qui est de ta base de données, consultes la doc du SGBD que tu utilises (ce qu'on peut difficilement deviner en plus).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Pour la base sqlite la limite de ligne est de 9223372036854775807 lignes ... autant dire que tu n'arriveras jamais au bout.

    Les caractéristiques de l'appareil notamment le socvkage seront sans dout ele facteur limitant.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Stockage pour la BDD, mémoire allouée par application pour la Collection.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre confirmé
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Par défaut
    Bonjour,

    Merci bien mes amis pour votre réponse ,en resumé:

    MAx=2 147 483 639 élèments.

    Attention, ensuite, tout dépend de la mémoire qu'occupe chacun des éléments que tu mets dans ton ArrayList : tu ne dépasseras pas forcément les capacités de l'ArrayList, mais tu peu facilement dépasser la mémoire allouée à ton application.

    Vous parlez la mémoire de la BD (found_client)que je met dans ArrayList .?

    J'ai pas compris :tu peu facilement dépasser la mémoire allouée à ton application ?

    Merci d'avance

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu posais la question au sujet d'une ArrayList de String : donc l'ArrayList contient un nombre de String, dont le maximum est (en gros) 2 147 483 639.

    Mais chaque String, qui est, en gros un tableau de caractères, plus quelques variables techniques (attributs de la classe String) : une String prend donc de la mémoire. Et la mémoire étant limitée, un trop grand nombre de grandes chaînes peut dépasser les capacités mémoire. Donc il est possible de dépasser la capacité mémoire (allouée à l'application), sans atteindre forcément le maximum de String qu'on peut mettre dans l'ArrayList. Et je ne parle pas de la mémoire occupée par les autres objets manipulés dans ton application, qui occupent, eux aussi, de la mémoire, et donc, diminue, la mémoire occupable par l'ArrayList et les String qui s'y trouvent.

    Pour résumé, je voulais dire que si on doit prendre en compte le maximum d'éléments qu'on peut stocker dans une ArrayList, il faut également prendre en compte la mémoire occupée par ces éléments.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    2 147 483 647 éléments maximum dans une ArrayList, mais, à priori, on ne devrait pas dépasser 2 147 483 639 élèments pour être sur de ne pas avoir de problème.
    Soit un stockage de 8G si les références occupent 32 bits OR une jvm 32 bits étant limitée à 4G, on peux supposé que les références occupent 64bits, donc 16G

    Tu va dépasser ta mémoire dans tous les cas, bien avant de dépasser la taille max de l'arraylist

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu va dépasser ta mémoire dans tous les cas, bien avant de dépasser la taille max de l'arraylist
    Certes. Je parlais théorique : on peut bien sûr probablement jamais atteindre les limites théoriques de l'ArrayList. D'autant plus qu'il faut compter avec tout ce qui occupe déjà la mémoire (à commencer par l'os, la jvm, etc...) mais en plus la place occupée par les éléments qu'on met dans l'ArrayList.

    Par contre, je ne comprends pas quand tu dis que :

    Citation Envoyé par tchize_ Voir le message
    OR une jvm 32 bits étant limitée à 4G, on peux supposé que les références occupent 64bits, donc 16G
    Quel lien entre la limite de la jvm 32 bits et le fait que les références occuperaient 64 bits ?

    Sinon, la limite théorique adressable sur 64 bits est beaucoup plus importante que 16Go non ? Il me semble avoir lu que les processeurs 64 bits pouvaient adresser 248 To. Je ne connais pas la limite max qu'on peut allouer à la JVM 64bits, peut être inférieure à 248To, mais à 16 Go ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par joel.drigo Voir le message

    Quel lien entre la limite de la jvm 32 bits et le fait que les références occuperaient 64 bits ?
    Un jvm 32bits aurrait une taille max de ArrayList occupant 8G? Or on ne peux pas adresser a priori plus de 4G en 32 bits, donc on ne pourra pas créer un ArrayList de taille maximum dessus (vu que ça occuperait 8G), donc il faut utiliser un jvm 64 bits pour atteindre la taille max de l'arraylist, mais alors, une arraylist plein occupe deux fois plus de taille, donc 16G. C'est très abstrait, rien n'empeche, a priori, une jvm de 64 bit d'utiliser des références sur 32 ou 48 bits, par exemple, ce n'est pas précisé dans la spec que je sache. D'ailleurs, si tu active la compression des références dans la jvm d'oracle 64 bits, tu peux adresser 32G avec des références sur 32 bits, donc on redescentd à 8G pour la taille max de l'arraylist

    https://wikis.oracle.com/display/Hot...CompressedOops

    Sinon, la limite théorique adressable sur 64 bits est beaucoup plus importante que 16Go non ?
    Je parle bien de l'arraylist qui, pleine, occupe une taille de (2 147 483 647 * taille d'une référence). Bien sur qu'une jvm de 64bits peux occuper plus, même si, d'une manière générale, des jvm à plus de 8G, par expérience, c'est pas recommandable (le garbage collector commence à souffir pour tout analyser )

    Il me semble avoir lu que les processeurs 64 bits pouvaient adresser 248 To.
    Ben la théorie, c'est 2^64, ce qui représente ~16*1024*1024 To. Après y a le physique qui suit pas toujours. Par exemple, les processuer x86-64, peuvent avoir une architecture interne qui n'autorise l'adressage que de 48 ou 56 bits suivant les modèles https://en.wikipedia.org/wiki/X86-64..._space_details

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ...D'ailleurs, si tu active la compression des références dans la jvm d'oracle 64 bits, tu peux adresser 32G avec des références sur 32 bits, donc on redescentd à 8G pour la taille max de l'arraylist ...
    Donc, on pourrait bien "remplir" une ArrayList, potentiellement ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Arraylist de Arraylists de strings
    Par PomFritz dans le forum C#
    Réponses: 6
    Dernier message: 31/05/2008, 12h03
  2. Comparaison : ArrayList vs String
    Par Revan dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 16/03/2008, 12h40
  3. [nested:iterate] sur une ArrayList de String
    Par kij dans le forum Struts 1
    Réponses: 2
    Dernier message: 24/10/2007, 09h46
  4. ArrayList de String
    Par blbird dans le forum Struts 1
    Réponses: 1
    Dernier message: 14/12/2006, 12h28
  5. [C#] Convertir un ArrayList en String[] ?
    Par Amerok dans le forum ASP.NET
    Réponses: 13
    Dernier message: 06/12/2005, 15h38

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