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

Langages de programmation Discussion :

[Java] Echanges entre le run-time et le système


Sujet :

Langages de programmation

  1. #1
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut [Java] Echanges entre le run-time et le système
    Bon{jour,soir},
    Quelqu'un a un résumé du fonctionnement ou plutôt l'échange établi entre le runtime Java et le système d'exploitation du point de vue mémoire?
    Est ce que le runtime Java adresse en dur la mémoire que lui attribue le système d'exploitation après une demande (création du processus lors de l'exécution du programme, demande de mémoire en dynamique...)?
    Le moteur d'exécution du runtime Java fait simplement la traduction du p-codes en code machine?
    Merci à vous

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Je vais essayer de te l'expliquer de la manière la plus simple du monde, c'est-à-dire sans faire intervenir la notion de plateforme Java (qui fait croire que les applications Java sont ... des applications !).

    - Tu as une application Java : myapp.class (qui est peut-être dans une archive jar, d'ailleurs les programmeurs java disent qu'un .class n'est pas une application Java complète, mais on s'en fiche)
    - Tu as un PC sur lequel est installé MS Windows.
    - Tu veux lancer myapp.class sur ton PC.

    Le problème c'est que Windows ne sait exécuter que des .exe, pas des .class ... La solution à ton problème : Demander à un .exe d'exécuter les instructions Java contenues dans myapp.class. Il faut donc évidemment que cet exe connaisse bien comment est organisé un fichier .class. Un tel exe est appelé un interpréteur Java. Un exemple d'interpréteur Java : le fichier java.exe du JRE de Sun.

    Donc, pour bien comprendre la relation qu'il y a entre le système et Java, il faut se mettre du côté du système : le système ne voit que java.exe. C'est la véritable application que tu lances lorsque tu demande l'exécution de myapp.class. myapp.class est juste un fichier fourni en paramètre de java.exe, c'est comme n'importe quel fichier de données (il ne faut donc même pas la voir comme une application). Il dicte seulement ce que java.exe doit faire mais l'application que tu lances, c'est à chaque fois java.exe. En résumé : lancer myapp.class = lancer java.exe (avec en paramètre myapp.class).

    java.exe peut lui-même faire appel à d'autres exe et/ou d'autres dlls, etc. mais ça ne change rien aux explications ci-dessus.

  3. #3
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut moteur d'exécution de JAVA
    Merci pour ces précisions clairs. J'ai bien compris. Néanmoins, ce que tu m'as précisé ressemble grandement au rôle du moteur d'exécution de JAVA (voir http://www.larcher.com/eric/guides/javactivex/III.htm).
    Par contre ma question était également si le runtime adresse en dur la mémoire attribué à son processus.

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Prends un exemple car je ne pense pas avoir compris ce que tu veux dire par adresser en dur la mémoire. Chaque processus, JVM ou non, dispose de son propre espace d'adressage. Il fait ce qu'il en veut. De toute façon il sera tué s'il fait quelque chose que l'OS n'aime pas. C'est tout ce que je peux dire avant que je comprenne bien ta pensée.

  5. #5
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut
    adresser en dur la mémoire
    Prenons l'exemple d'un compilateur qui réserve de la mémoire à l'avance pour les variables globales. Le fichier en langage machine, qui en l'occurrence fait appel aux différentes adresses de la mémoire, doit être compréhensible par le microprocesseur ; seulement , voila les choses ne se passent pas vraiment de cette manière dans la mesure où les adresses utilisées par le compilateurs/runtime sont certainement relogées pour une question de sécurité ou tout simplement d'une gestion propre à l'OS.
    La question que je me pose, est ce que le runtime a à sa disposition les vrais adresses mémoire ( d'où le terme en dur) ou sont elles effectives.
    Une autre question que je me pose : Dans le fichier produit par le compilateur, trouve -t- on des adresses mémoire ? où elles sont plutôt produites par le runtime pendant l'exécution.
    Bien à toi

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Prenons l'exemple d'un compilateur qui réserve de la mémoire à l'avance pour les variables globales. Le fichier en langage machine, qui en l'occurrence fait appel aux différentes adresses de la mémoire, doit être compréhensible par le microprocesseur ; seulement , voila les choses ne se passent pas vraiment de cette manière dans la mesure où les adresses utilisées par le compilateurs/runtime sont certainement relogées pour une question de sécurité ou tout simplement d'une gestion propre à l'OS.
    Ce dont on peut déjà être sûr c'est que dans un .class il n'y aura jamais de "vraies adresses" codées en dur, sinon il ne serait pas "portable" (du simple que fait le nombre de bits utilisés pour représenter une adresse peut varier d'un système à un autre par exemple, et que la manière d'interpréter ces bits n'est pas universelle non plus ...). Les adresses "en dur" contenues dans la classes sont "abstraites". Soit par exemple une variable globale x référencée par l'adresse "J_x" dans le .class. Lors du démarrage de l'application, la JVM va réserver la mémoire qui sera effectivement utilisée par cette variable. Son adresse dans la mémoire virtuelle de la JVM sera par exemple "W_x" (qui a peu de chances d'avoir été codé en dur). Chaque fois tu demanderas un accès à J_x, la JVM va te positionner sur W_x. J'ai bien répondu ?

  7. #7
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut
    Oh oui. C'est très clair! Merci beaucoup

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

Discussions similaires

  1. Migration Access 97 vers SQL Server + Access Run Time
    Par KiDiBoo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/10/2005, 09h05
  2. problème java run time environment
    Par abrmed dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 19/08/2005, 13h27
  3. [Java] Communication entre client et serveur
    Par danje dans le forum CORBA
    Réponses: 1
    Dernier message: 14/12/2004, 18h08
  4. [c-linux]echange entre 2 sockets
    Par .:dev:. dans le forum Développement
    Réponses: 2
    Dernier message: 11/06/2004, 19h13
  5. calcul entre 2 champs time
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 19/02/2003, 10h12

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