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

Groovy Java Discussion :

Représentation des méthodes anonymes dans la mémoire


Sujet :

Groovy Java

  1. #1
    Membre expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 493
    Points : 3 872
    Points
    3 872
    Billets dans le blog
    8
    Par défaut Représentation des méthodes anonymes dans la mémoire
    Bien le bonjour !

    Un ami et moi se posions la question à propos de la représentation des méthodes/fonctions anonymes dans la mémoire en Groovy. (et donc indirectement en Java)

    Je m'explique, lorsque l'on écrit ce type d'instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        def myFunction = { -> println "Hi, there."}
        def functionPointer = myFunction
    Comment la JVM gère-t-elle ce genre de cas ?
    La méthode ne possédant pas à proprement parlé de nom, la JVM va-t-elle créer un pointeur vers l'adresse mémoire de la fonction ou faire l'effort de réécrire entièrement cette dernière ?

    C'est une question un peu farfelue, mais disons que ça pourrait m'intéresser de savoir comment elle se débrouille et si l'utilisation répétée des closures impact gravement les performances ou non.

    Je vous remercie d'avance pour votre réponse !

    Songbird.
    Avant de poster: FAQ Rust; FAQ Dart; FAQ Java; FAQ JavaFX.
    Vous souhaiteriez vous introduire au langage Rust ? C'est par ici ou ici !
    Une question à propos du langage ? N'hésitez pas à vous rendre sur le forum !


    Pour contribuer à la rubrique, vous pouvez me contacter par MP (Sorry, we're closed!) ou contacter directement la rédaction.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    D'après la doc, les closures de Groovy correspondent à une instance de la classe groovy.lang.Closure :
    http://groovy-lang.org/closures.html#closure-as-object

    Donc je suppose que cela utilise une classe anonyme, et que ton code devrait correspondre à peu-près à ceci en équivalent Java :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Closure myFunction = new Closure() { 
            public void call() {
              System.out.println("Hi, there.");
        };
        Closure functionPointer = myFunction;




    A noter que c'est très différent des expressions lambdas de Java 8 qui créent véritablement une fonction :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Test {
     
    	public void exemple() {
    		Runnable myFunction = () -> System.out.println("Hi, there.");
     
    		myFunction.run();
    	}
     
    }
    Est ainsi compilé en l'équivalent de ceci :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Test {
     
    	public void exemple() {
    		Runnable myFunction = Test::lambda$0; // utilise l'invocation dynamique pour créer une instance
     
    		myFunction.run();
    	}
     
    	// méthode générée automatiquement par le compilateur :
    	private static void lambda$0() {
    		System.out.println("Hi, there.");
    	}
    }



    a++

  3. #3
    Membre expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 493
    Points : 3 872
    Points
    3 872
    Billets dans le blog
    8
    Par défaut
    Hello,

    D'accord, j'ai compris. Je me doutais que la JVM devait gérer ça proprement, mais je n'aurais pas pensé à cette façon. (Moi et l'objet... )

    En tout cas, merci pour la clarté de ta réponse, a+
    Avant de poster: FAQ Rust; FAQ Dart; FAQ Java; FAQ JavaFX.
    Vous souhaiteriez vous introduire au langage Rust ? C'est par ici ou ici !
    Une question à propos du langage ? N'hésitez pas à vous rendre sur le forum !


    Pour contribuer à la rubrique, vous pouvez me contacter par MP (Sorry, we're closed!) ou contacter directement la rédaction.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/06/2013, 10h53
  2. Réponses: 8
    Dernier message: 15/03/2011, 12h24
  3. Réponses: 2
    Dernier message: 08/12/2008, 18h20
  4. Appeler des méthodes Java dans javascript
    Par Kyo-AzN dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2008, 20h19
  5. Réponses: 3
    Dernier message: 06/03/2008, 16h50

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