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 :

Allocation, BufferedImage et UnSafe


Sujet :

Java

  1. #1
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut Allocation, BufferedImage et UnSafe
    Bonsoir,

    j'aurai quelques question concernant les allocations mémoires en Java.

    - Tout d'abord, il me semble que lorsque l'on fait une simple allocation du type "int[] tab = new int[10]" (ou tout autre type primitif), on n'est pas certain que toutes les cases allouées soient contiguës en mémoire. Est ce bien cela ?

    - Si j'ai raison, y a t-il un moyen de forcer pour que l'allocation sont contigüe ?

    - Il me semble que la classe UnSafe sert justement à avoir la continuité dans les données. Est ce bien cela ?


    Merci par avance pour vos précisions.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    - Tout d'abord, il me semble que lorsque l'on fait une simple allocation du type "int[] tab = new int[10]" (ou tout autre type primitif), on n'est pas certain que toutes les cases allouées soient contiguës en mémoire. Est ce bien cela ?
    1) où à tu lu cela
    2) en quoi cela te poserait-il problème.

    - Il me semble que la classe UnSafe sert justement à avoir la continuité dans les données. Est ce bien cela ?
    Non, la classe unsafe sert à violer à peu près toutes les contraintes du langage. Tu te fera le plus grand bien en oubliant qu'elle existe

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Sans compter que si on se permet d'utiliser sun.misc.Unsafe, alors on doit en principe penser que les tableaux sont contigus : deux méthodes de Unsafe n'auraient aucun sens, sans cela.

    Par contre, si on fait int[][] tab = new int[10][10];
    Là, en effet, les 100 éléments ne seront pas contigus.
    Mais Unsafe ne propose rien de mieux que faire int[] tab = new int[100] à la place.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    1) où à tu lu cela
    Honnêtement je ne me rappelle plus :-(
    Par contre MicroSoft avait justement proposé une JVM dont la principale particularité était al continuité en mémoire. Ils avaient perdu le procès contre Sun et avaient laissé tomber.


    Citation Envoyé par tchize_ Voir le message
    2) en quoi cela te poserait-il problème.
    La lenteur chronique grandissante de Java fasse au C me pose de plus en plus de problème. Je voudrai donc faire de l'auto-vectorization dans un coeur C/C++ et l'appeler via SWIG. Mais pour cela j'ai impérativement besoin d'une continuité en mémoire.


    Citation Envoyé par tchize_ Voir le message
    Non, la classe unsafe sert à violer à peu près toutes les contraintes du langage. Tu te fera le plus grand bien en oubliant qu'elle existe
    J'aime pas les contraintes
    J'avais déjà essayé d'utiliser Unsafe pour gagner en vitesse : pas de contrainte => on perd pas de temps. Evidemment il faut faire attention à ce que l'on fait.
    Par contre je n'avais pas réussi à l'utiliser efficacement et du coup les gains en temps étaient dérisoires :-(
    Bon faut dire aussi que les exemples d'utilisation de la classe ne courent pas les rues et que je pense ne pas l'utiliser de façon optimale :-(
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    On peut se demander pourquoi tu fais du Java, en fait.
    Plus exactement, tu ne fais pas de Java : tu fais du C++ avec un compilateur Java. Tous les inconvénients des deux langages, en ne gardant comme avantage qu'une part de la rapidité d'accès du C.

    Personnellement, si je devais traiter des choses qui doivent zapper les sécurité de Java pour raisons de performances, je les ferais intégralement en C, données comprises, et je le rendrais accessible au reste de mon programme Java par JNI.

    Mais si tu tiens tellement à t'embarrasser de Unsafe au lieu d'un langage fait pour, à ta guise.
    En attendant, bien qu'en théorie, en effet, Java dit que ça ne te concerne pas si un tableau est contigu ou non, en pratique Unsafe lui-même et plusieurs autres choses laissent penser que c'est sûrement le cas, sans quoi ils auraient peu d'intérêt.

    Unsafe est, par contre, parfaitement capable de zapper un certain nombre de sécurités qui ralentissent les accès mémoires ou qui ne sont pas commodes. Mais ça a des limites : les accès à Unsafe restent des accès à une méthode, après tout. On ne peut pas accéder plus vite à un tableau avec Unsafe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Si la JVM ne vérifie pas les débordement à cause de Unsafe, on doit théoriquement accélérer les lectures/écritures.

    En fait j'ai voulu passer à un langage Objet et Java était le plus utilisé. J'adore ce langage pour tout ce qu'il apporte et ça simplicité.
    Mais par moment, j'aimerai pouvoir aller dans la performance pure et passer au delà de toutes ces vérifications et autres contraintes limitantes.

    Pour le traitement d'image, Java me pose un autre problème vraiment handicapant en terme de performance, c'est l'absence des unsigned, ce qui fait que je dois utiliser en permanence du "& 0xFF" ou du "& 0xFFFF" pour avoir les bonnes valeurs.
    Sans compter que les optimisation SSE2 sont super mal faites dans la JVM et l'auto-vectorisation n'est pas gérée.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Si tu es à l'aise avec C/C++, pourquoi ne pas faire les operations critiques avec et n'utiliser java que pour exploiter le resultat ? Parce que la lecture du fil laisse penser que tu vas faire un truc entre 2 ou tu auras les inconvenients des 2 cotés : Pas portable, moins rapide et risque de bug...

  8. #8
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Si tu es à l'aise avec C/C++, pourquoi ne pas faire les operations critiques avec et n'utiliser java que pour exploiter le resultat ? Parce que la lecture du fil laisse penser que tu vas faire un truc entre 2 ou tu auras les inconvenients des 2 cotés : Pas portable, moins rapide et risque de bug...
    Je suis pas fou ! enfin... pas tout à fait :-)

    Je veux garder tous les avantages de Java, mais j'aurai voulu palier à certains de ses défauts.

    C'est pour cela que je voulais m'assurer que la mémoire était bien continue.
    Si j'arrive à certifier une mémoire continue/contigüe, je m'assure de pouvoir utiliser une coeur C++ ultra performant, tout en laissant cela transparent à l'utilisateur.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    La contiguité dépend, je dirais, de ta jvm. maintenant si tu veux traiter tes images en C++, qu'est-ce qui t'empeche de les stocker dans des tableaux c++ plutot que dans des objets java?

  10. #10
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    La contiguité dépend, je dirais, de ta jvm. maintenant si tu veux traiter tes images en C++, qu'est-ce qui t'empeche de les stocker dans des tableaux c++ plutot que dans des objets java?
    Toutes mes I/O sont faites en Java, donc par défaut mes images sont stockées dans des tableaux Java.
    Ce n'est que pour certaines tâches très spécifiques que je souhaite utiliser le C++.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. Allocation managée dans de l'unsafe code
    Par NiamorH dans le forum C#
    Réponses: 4
    Dernier message: 19/11/2008, 18h43
  2. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  3. Réponses: 4
    Dernier message: 03/12/2002, 16h47
  4. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  5. Allocation de ressources
    Par Eric Pasquier dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/10/2002, 09h19

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