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 :

SAX + Garbage collector


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut SAX + Garbage collector
    Bonjour tout le monde,

    Je suis novice sous android et j'ai plusieurs soucis dans ma petite appli.

    1- Tout d'abord je parse avec sax un fichier xml de 3Mo. Le parsing se passe bien mais je vois souvent un appel au garbage collector. A chaque Lancement de l'app, j'ai droit a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    07-13 10:41:17.233: D/dalvikvm(218): GC freed 23137 objects / 947184 bytes in 133ms
    07-13 10:41:19.353: D/dalvikvm(218): GC freed 25824 objects / 1052704 bytes in 181ms
    07-13 10:41:21.502: D/dalvikvm(218): GC freed 24467 objects / 1040648 bytes in 165ms
    07-13 10:41:23.503: D/dalvikvm(218): GC freed 25074 objects / 1052592 bytes in 175ms
    07-13 10:41:25.732: D/dalvikvm(218): GC freed 24332 objects / 1019712 bytes in 205ms
    Durant le parsing, 1 balise = 1 objet que je stock une HashMap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     myList = HashMap<Integer,ArrayList<MyObject>>();
    Est-ce normal et Comment Je peux éviter ces appels au garbage collector ?

    En tentant de débugger pas à pas, je n'arrive pas à répérer l'appel à gc car tout se passe bien durant les 20 premieres boucle.... (apres plus de patience...)

    Merci d'avance

    ps: Si vous avez un bon tuto sur DDMS, je suis preneur car pour le moment, j'ai testé et ca reste flou....

  2. #2
    Membre habitué Avatar de linked
    Profil pro
    Développeur Android
    Inscrit en
    Mai 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Mai 2008
    Messages : 88
    Points : 133
    Points
    133
    Par défaut
    Le Garbage collector fait son boulot, tu n'y peut pas grand chose et c'est sûrement mieux ainsi.

    Le seul truc que tu peut faire c'est limiter la mémoire de ton programme ou plutôt de ses variables. Le fait de stocker les choses que tu parse prend de la place et le GC en fait pour pouvoir continuer.

    Après 3Mo c'est beaucoup si tu en stock une bonne partie, tu ne peut l'éviter je pense à moins que tu gère libère de suite de la mémoire (et encore...).

    Es ce que c'est gênant pour ton application ?
    Applications et jeux gratuits sur http://www.kamaxandroid.com

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    3 Mo c'est énorme pour un fichier XML.
    Il n'y a rien à faire pour éviter le GC puisque, au minimum, chaque balise construit une String et un Attributes, chaque texte construit un char[].

    La seule solution pour éviter ça serait de trouver un parseur non-standard qui évite autant que possible la construction d'objets (et ça veut dire pas de String. Bon courage.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci pour vos réponses !

    J'ai déjà essayer de limiter au maximum les variables

    L'app permet de parcourir un arbre (que je stock en mémoire donc apres parsing de mon xml). Il est important que chaque objet se souvienne de son pere et connaisse ses enfants. J'utilise des entiers pour cela et m'assure que chaque objet n'est crée qu'une fois.

    j'utilise un viewflipper avec 2 listview pour me ballader dans l'arbre. Quand je clique sur un item, je récupere ses enfants et setup le deuxieme listView puis je switch.

    Assez simple comme appli pour commencer. Mais dans mon cas elle est tres lente, à cause des appel à gc (durant le parsing ou lors du switch entre les 2 vues).

    Y a-t-il un meilleur moyen de coder cela.

    je ne peux pas reduire la taille de mon xml. Le découper me parait pas du tout pratique, car les profondeurs de l'arbre sont assez variés. Le mettre sous une autre forme? sqlite, pkoi pas. mais Quel serait l'avantage ?

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    sqlite a l'avantage des DB: à savoir rechercher dans l'arbre vite et facilement, sans charger tout l'arbre en mémoire.... donc extraire juste les informations nécessaires....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. [JVM] Java 5 et Garbage Collector(Parralèle)
    Par ssaunois dans le forum Général Java
    Réponses: 6
    Dernier message: 28/11/2005, 23h42
  2. [JVM]Garbage collector
    Par godik dans le forum Général Java
    Réponses: 5
    Dernier message: 07/10/2005, 09h12
  3. JPanel et Garbage Collector
    Par tck-lt dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 25/07/2005, 18h03
  4. [JVM] les objets et le Garbage collector
    Par Kurdran dans le forum Général Java
    Réponses: 7
    Dernier message: 02/06/2005, 16h57
  5. [Language]Garbage collector
    Par GETah dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2005, 15h18

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