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

JDBC Java Discussion :

Grosse quantité de photo et mémoire


Sujet :

JDBC Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut Grosse quantité de photo et mémoire
    Bonjour,

    J'ai un problème avec un petit script et la mémoire. J'ai environ 4000 images (2000 de 20ko max et 2000 de 500 à 700ko) à mettre sur un serveur Mysql. A chaque fois que je le lance ça me rend une erreur comme quoi il manque de mémoire.

    Je comprends pas bien pourquoi la mémoire ne se décharge pas...

    Je met les 2 script si jamais quelqu'un à une idée :

    Première classe qui parcours le dossier source. Pour ce qui est de la méthode ChangeFileName.getNumberFromScreenshot() elle donne juste un int et fonctionne parfaitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    package insertImage;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.lang.management.ManagementFactory;
    import java.lang.management.MemoryMXBean;
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    import changeFileName.ChangeFileName;
     
    public class InsertImage {
    	static Mysql mysql = null;
    	public static void main(String[] args) throws SQLException, IOException {
    		mysql = new Mysql();
    		mysql.connectToMySQL("192.168.1.23", 3306, "root", "toor");
    		mysql.executeQuery("USE dolModel");
    		File dirSourceResized = new File("/home/charles/Images/resized");
    		File dirSourceNormal = new File("/home/charles/Images/final");
    		int i = 0;
    		MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
    		if (dirSourceResized.exists()) {
    			for (int j=0;j<3000;j++) {
    				newImage(j);
    			}
    			for (File screenShotNormal : dirSourceNormal.listFiles()) {
    				if (screenShotNormal.getName().contains("sshot")) {
    					i++;
    					insertNewImage(ChangeFileName.getNumberFromScreenshot(screenShotNormal), new File(dirSourceResized+File.separator+screenShotNormal.getName()) , screenShotNormal);
    				}
    			}
    		}
     
    	}
     
    	private static void newImage(int j) throws SQLException {
    		Mysql.newImage(j);
    	}
     
    	private static void insertNewImage(int numberScreen, File screenShotResized, File screenShot) throws SQLException, IOException {
    		Mysql.insertImage(numberScreen,screenShotResized, screenShot);
    	}
    }
    Je ne met que la méthode qui est utile en ce qui concerne la 2eme classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
        public static void insertImage(int id, File screenShotResized,File screenShot) throws SQLException, IOException {
     
        	BufferedInputStream screen = new BufferedInputStream(new FileInputStream(screenShot));
        	byte[] bytes = new byte[screen.available()];
     
     
        	BufferedInputStream screenResized = new BufferedInputStream(new FileInputStream(screenShotResized));
        	byte[] bytesMini = new byte[screenResized.available()];
     
        	screen.read(bytes);
        	screenResized.read(bytesMini);
     
        	stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
     
        	rsImage = stmt.executeQuery("select * from T_MODEL where idModel="+id);
        	rsImage.first();
     
        	rsImage.updateBytes("imageNormalModel", bytes);
        	rsImage.updateBytes("imageResizedModel", bytesMini);
     
        	rsImage.updateRow();
     
        	screen.close();
        	screenResized.close();
        }
    Je pense que le problème vient du fait que la mémoire n'est pas libéré quand la méthode insertImage() se termine. Du coup les images en mémoire (dans les variables bytes[] et bytesMini[]) prennent de la place et cette place monte à plus de 500Mo ce qui est pas bon du tout... Au bout d'un moment le script plante disant qu'il manque de mémoire.

    Si quelqu'un pouvait jeter un coup d'oeil pour m'expliquer.

    J'ai mis en fichiers attachés les 2 classes utiles. Pour la connexion j'utilise le connecteur qu'on peut trouver ici :
    http://dev.mysql.com/downloads/connector/j/5.1.html

    Merci d'avance.

    edit : C'est au fichier 656 que ça fou la merde (c'est pas toujours le même) la mémoire utilisé monte a 474Mo. L'erreur c'est java.lang.OutOfMemoryError : Java heap space à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsImage.updateBytes("imageNormalModel", bytes);
    Çà par contre ça change pas je crois (mais pas sûr...) Il est tard pas le temps de retester...
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Tableaux] optimisation pour grosse quantité
    Par mdr_cedrick dans le forum Langage
    Réponses: 7
    Dernier message: 30/04/2008, 18h31
  2. dll C++ et grosse quantité de variables
    Par antiseche dans le forum MATLAB
    Réponses: 1
    Dernier message: 29/03/2008, 01h10
  3. Réponses: 1
    Dernier message: 14/09/2007, 22h34
  4. texte+ photo +carte mémoire
    Par Vestigo dans le forum Composants
    Réponses: 4
    Dernier message: 12/09/2007, 16h32
  5. Paralleliser traitements grosse quantité donnee
    Par Sébastien P dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 13/04/2007, 19h28

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