Derrière toi Une machine virtuelle!



Documents pareils
Systeme d'exploitation

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

as Architecture des Systèmes d Information

Cours Java Native Interface

Corrigé des exercices sur les références

Java Licence Professionnelle CISII,

Programmer en JAVA. par Tama

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Java - la plateforme

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII,

TP1 : Initiation à Java et Eclipse

Initiation à JAVA et à la programmation objet.

Plan du cours. Historique du langage Nouveautés de Java 7

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Une introduction à Java

LOG4430 : Architecture logicielle et conception avancée

Machines Virtuelles. et bazard autour. Rémi Forax

INITIATION AU LANGAGE JAVA

Cours 1: Java et les objets

Package Java.util Classe générique

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Introduction aux Machines Virtuelles avec VMKit

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Introduction au langage C

La JVM. La machine virtuelle Java. La JVM. La JVM

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Environnements de développement (intégrés)

ACTIVITÉ DE PROGRAMMATION

Présentation de Java. Olivier de Pertat IT GROUP

Threads. Threads. USTL routier 1

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Utilisation d objets : String et ArrayList

Programmation Orientée Objet

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Java 1.5 : principales nouveautés

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

TP1 : Initiation à Java et Eclipse

Machines virtuelles Cours 1 : Introduction

Corrigés des premiers exercices sur les classes

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

La technologie Java Card TM

PROGRAMMATION PAR OBJETS

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Chapitre 10. Les interfaces Comparable et Comparator 1

Introduction au langage Java

Eclipse atelier Java

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Remote Method Invocation Les classes implémentant Serializable

Programmation Objet Java Correction

Cours 1 : La compilation

Programmation Réseau SSH et TLS (aka SSL)

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Remote Method Invocation (RMI)

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Calcul Parallèle. Cours 5 - JAVA RMI

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Auto-évaluation Programmation en Java

Programmation système de commandes en C

Chapitre I Notions de base et outils de travail

Premiers Pas en Programmation Objet : les Classes et les Objets

RMI le langage Java XII-1 JMF

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

3IS - Système d'exploitation linux - Programmation système

Un ordonnanceur stupide

Java Avancé. Le langage Java. Rémi Forax

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Traitement de données

Le prototype de la fonction main()

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Langage Java. Classe de première SI

Généralités sur le Langage Java et éléments syntaxiques.

Programmation en Java IUT GEII (MC-II1) 1

SGDN. Projet: JAVASEC

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

OS Réseaux et Programmation Système - C5

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

TD3: tableaux avancées, première classe et chaînes

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Lier Erlang avec d autres langages de programmation

Programmeur Java 1.4 et 5.0

Instrumentation de code Java

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Projet de développement

Introduction à Java. Philippe Genoud.

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

4. Groupement d objets

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Utiliser Java sans BlueJ

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Évaluation et implémentation des langages

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Bases Java - Eclipse / Netbeans

Tp 1 correction. Structures de données (IF2)

Cours d Algorithmique et de Langage C v 3.0

Transcription:

Derrière toi Une machine virtuelle! Yann-Gaël Guéhéneuc guehene@emn.fr École des Mines de Nantes, France Object Technology International Inc., Canada D où ça vient? Calculatrice Machine de Turing 1936 λ-calcul et π-calcul 1934 Machine à registres Machine à piles 2/21

Comment? Turing Un ensemble fini d états, d instructions, et un alphabet fini Machine à registre Des registres, un chemin de donnée, un contrôleur Machine à pile Une pile, des opérations, un contrôleur (?) 3/21 Qu est-ce que c est? Une machine virtuelle c est : Un programme qui s interpose entre un programme et un système d exploitation Un interpréteur qui interprète un programme pour un système d exploitation Un compilateur qui compile à la volée un programme pour un système d exploitation 4/21

En bref? Une machine virtuelle c est : Programme Ordinateur Machine virtuelle Système d'exploitation Machine virtuelle Système d'exploitation Programme Ordinateur Une machine virtuelle ce n est pas : Inutile 5/21 Pourquoi? n langages + m systèmes d exploitation = n * m compilateurs n langages + 1 machine virtuelle + m systèmes d exploitation = n compilateurs (+ m machines virtuelles gratuites ) 6/21

Et aujourd hui? La machine virtuelle de Java : Par méthode : Un cadre Par classe : Un paquet Par threads : Une pile Un registre Pour tous les threads : Un tas Une zone «méthodes» Une pile «méthodes natives» 7/21 Et ce n est pas tout? La machine virtuelle de Java : Sandbox Class Loader Garbage collector Security Java Native Interface Java Platform Debug Architecture Java Virtual Machine Profiler Interface 8/21

JNI (1/3) Java Native Interface Interface de la JVM vers l extérieur en C Interface de l extérieur vers la JVM en C 9/21 JNI (2/3) package emn.course.vm; public final class GCD_C { public native int computegcd(int a, int b); static { System.loadLibrary("GCD_C_Impl"); public static void main(string[] args) { GCD_C myjnicalltogcd = new GCD_C(); System.out.println(myJNICallToGCD.computeGCD(6, 18)); 10/21

JNI (3/3) #include "emn_course_vm_gcd_0005fc.h" #include <stdio.h> jint JNICALL Java_emn_course_vm_GCD_1C_computeGCD( JNIEnv * env, jobject obj, jint a, jint b) { if (b == 0) { return a; else { return Java_emn_course_vm_GCD_1C_computeGCD( env, obj, b, a % b); 11/21 JPDA (1/5) Java Platform Debug Architecture Tout pour déboguer / contrôler un programme qui marche dans une machine virtuelle Java Trois niveaux : Java Debug Interface Java Debug Wire Protocol Java Virtual Machine Debug Interface 12/21

JPDA (2/5) JPDA (3/5) 13/21 n Expérimentations : Environnements de développement : IBM Eclipse Borland JBuilder Sun Forte Exemples simples 14/21 7

JPDA (4/5) final VirtualMachineManager vmmanager = Bootstrap.virtualMachineManager(); final LaunchingConnector launchingconnector = vmmanager.defaultconnector(); final Map arguments = launchingconnector.defaultarguments(); final Iterator iterator = arguments.values().iterator(); while (iterator.hasnext()) { final Argument argument = (Argument) iterator.next(); if (argument.name().equals("main")) { argument.setvalue("emn.course.vm.gcd"); final VirtualMachine vm = launchingconnector.launch(arguments); vm.resume(); 15/21 JPDA (5/5) Démo? 16/21

JVMPI (1/4) Java Virtual Machine Profiler Interface Tout pour connaître le profile d exécution d un programme qui marche dans une machine virtuelle Java 17/21 JVMPI (2/4) JNIEXPORT jint JNICALL JVM_OnLoad(JavaVM *jvm, char *options, void *reserved) { fprintf(stderr, "Initializing the profiler for the Course on VMs.\n"); // Get JVMPI interface pointer if (((*jvm)->getenv(jvm, (void **)&jvmpi_interface, JVMPI_VERSION_1)) < 0) { fprintf(stderr, "Initialization error in obtaining JVMPI interface pointer.\n"); return JNI_ERR; // Initialize the JVMPI interface jvmpi_interface->notifyevent = NotifyEvent; // Enable "class load"- and "thread start"-event notification jvmpi_interface->enableevent(jvmpi_event_class_load, NULL); jvmpi_interface->enableevent(jvmpi_event_thread_start, NULL); 18/21 fprintf(stderr, "Initialization done.\n\n"); return JNI_OK;

JVMPI (3/4) 19/21 void NotifyEvent(JVMPI_Event *event) { const char *class_name; const char *thread_name; switch(event->event_type) { case JVMPI_EVENT_CLASS_LOAD: class_name = event->u.class_load.class_name; if (!((class_name[0] == 'j' && class_name[1] == 'a' && class_name[2] == 'v' && class_name[3] == 'a') (class_name[0] == 's' && class_name[1] == 'u' && class_name[2] == 'n'))) { fprintf(stderr, "> Class loaded: %s\n", class_name); break; case JVMPI_EVENT_THREAD_START: thread_name = event->u.thread_start.thread_name; fprintf(stderr, "> Thread started: %s\n", thread_name); break; JVMPI (4/4) Démo? Initializing the profiler for the Course on VMs. Initialization done. 20/21 > Thread started: Signal Dispatcher > Thread started: CompileThread0 > Class loaded: com.sun.rsajca.provider > Class loaded: com.sun.rsajca.provider$1 > Class loaded: emn.course.vm.gcd > Thread started: AWT-EventQueue-0 > Thread started: SunToolkit.PostEventQueue-0 > Thread started: AWT-Windows > Class loaded: emn.course.vm.gcd$1 > Thread started: TimerQueue > Thread started: Thread-0

Et quoi d autre? Lisp / Scheme Pascal Prolog Squeak C# Proof-carrying code Strongly-typed intermediate languages 21/21