Java - la plateforme



Documents pareils
Machines Virtuelles. et bazard autour. Rémi Forax

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

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

Vulgarisation Java EE Java EE, c est quoi?

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

Initiation à JAVA et à la programmation objet.

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

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation Orientée Objet

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

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

La technologie Java Card TM

Java Licence professionnelle CISII,

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

as Architecture des Systèmes d Information

Éléments de programmation et introduction à Java

Cours 1: Java et les objets

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

INITIATION AU LANGAGE JAVA

Java Licence Professionnelle CISII,

Derrière toi Une machine virtuelle!

Annexe : La Programmation Informatique

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

Une introduction à Java

Utiliser Java sans BlueJ

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

PROGRAMMATION PAR OBJETS

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Programmeur Java 1.4 et 5.0

La carte à puce. Jean-Philippe Babau

Java Licence Professionnelle CISII,

Introduction aux Machines Virtuelles avec VMKit

ACTIVITÉ DE PROGRAMMATION

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Présentation de Java. Olivier de Pertat IT GROUP

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

java : Langage et Environnement

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

Eclipse atelier Java

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

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

Introduction au langage Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Threads. Threads. USTL routier 1

Introduction à Java. Philippe Genoud.

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

Java pour le Web. Cours Java - F. Michel

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

Java c est quoi? Java pourquoi?

Évaluation et implémentation des langages

RMI le langage Java XII-1 JMF

Génération de code binaire pour application multimedia : une approche au vol

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Héritage presque multiple en Java (1/2)

Une tasse de café fumante est

TP1 : Initiation à Java et Eclipse

Introduction : les processus. Introduction : les threads. Plan

Exercices INF5171 : série #3 (Automne 2012)

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

Instrumentation de code Java

ENSIAS Rapport De Stage BPCS. Rapport de stage. Encadré par : MAREQUAZ Saâd. Réalisé par : Pratic Abdellah

4. Groupement d objets

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

Langage Java. Classe de première SI

Cours 1 : La compilation

Chapitre I Notions de base et outils de travail

Programmer en JAVA. par Tama

SGDN. Projet: JAVASEC

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Traitement de données

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

TP1 : Initiation à Java et Eclipse

Programmation d'applications sur PDA

Programmation C. Apprendre à développer des programmes simples dans le langage C

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation en Java IUT GEII (MC-II1) 1

Un ordonnanceur stupide

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

TP, première séquence d exercices.

Auto-évaluation Programmation en Java

Cours en ligne Développement Java pour le web

Gestion hybride de la mémoire dynamique dans les systèmes Java temps-réel

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

Point sur les solutions de développement d apps pour les périphériques mobiles

RENDRE VOS APPLICATIONS JAVA PLUS EFFICACES Ce qu'il faut savoir

Xavier Costa. «Write once, run anywhere»

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chapitre 2. Classes et objets

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

IBM Rational Application Developer pour WebSphere Software V8.5 accélère le développement d'applications de haute qualité.

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

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

Projet de programmation (IK3) : TP n 1 Correction

Gestion de la mémoire sous Java Composition et fonctionnement -- Transcription d'un sujet de webcast

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

Transcription:

Java - la plateforme

Java la plateforme Java? VM GC JIT

Java Aujourd'hui 3 environnements d'exécutions différents Java ME (Micro Edition) pour PDA, téléphone Android (Java SE moins certain paquetages) Java SE (Standard Edition) pour desktop Java EE (Entreprise Edition) pour serveur Servlet/JSP/JSTL/JSF JTA/JTS, EJB, JMS, JavaMail, etc.

Java SE Aujourd'hui API du JDK 1.8 (~19 000 classes) : java.lang, java.lang.reflect, java.lang.invoke java.util, java.util.stream, java.util.concurrent java.awt, java.applet, javax.swing java.io, java.nio, java.net java.beans, java.sql, javax.sql etc...

Java Standard Edition JDK 1.0 (1995) JDK 1.1 (1997) JDK 1.2 - Java 2 (1999) JDK 1.3 (2001) JDK 1.4 (2002) JDK 1.5 - Java 5 (2004) JDK 1.6 - Java 6 (2006) JDK 1.7 - Java 7 (2011) JDK 1.8 - Java 8 (2014) Compatibilitée ascendante

Java Community Process Java est un ensemble de spécifications Le JCP (jcp.org) fait évoluer la plateforme Le JDK est l'implantation de Java par Oracle, IBM, RedHat, SAP, Apple et des individuels Deux specs importantes: JLS (Java Language Specification) JVMS (Java Virtual Machine Specification)

JDK/OpenSource Le JDK est OpenSource depuis novembre 2006 (complètement en 2008) Toutes les sources sont disponibles : http://www.openjdk.org N'importe qui peut contribuer, fixer des bugs, etc. Créer votre JDK :) hg fclone http://hg.openjdk.java.net/jdk8/jdk8 cd make; make

VM Java fonctionne sur une machine virtuelle bcp de langages utilisent le même principe SmallTalk, Self, Perl, Python, Java, Ruby, JavaScript, C# VM WORA (write once run anywhere) Services (classloader, JIT, GC, concurency builtin, etc)

Architecture en C Codes en Ascii Compilateur 010 010 010 010 Le code est compilé sous forme objet relogeable L'éditeur de liens lie les différentes bibliothèques entre elles pour créer l'exécutable Editeur de lien 01 0 Plateforme + OS

Architecture en Java Codes en Unicode Compilateur Le code est compilé dans un code intermédiaire (bytecode) La Machine Virtuelle charge les classes à la demande, fait l'édition de lien et exécute le code bytecode 0xCaf 0xCaf VM 0xCaf 0xCaf API Plateforme + OS 0xCaf 0xCaf

Interpreteur? Certain langages ne possèdent qu'un interpreteur Perl, CPython, CRuby Les autres générent du code assembleur à la volée pour augmenter la vitesse exécution (JIT) Mixed-mode: interpreter + JIT(1 ou plusieurs) Java (Oracle Hotspot) JIT-only Java (IBM J9, Oracle JRockit) / Javascript (Google V8 / Mozilla *Monkey) / C#

Garbage Collector Algorithme utilisé pour réclamer la mémoire de plusieurs objets lorsque ceux-ci ne sont plus accessibles Il se déclenche Lors d'un new si il n'y a plus assez de mémoire Périodiquement en minutes sur un desktop, en milisecondes sur un server Limitation Le GC doit connaitre la mémoire totale qui lui sera allouée.

Algos de Gcs (simplifié) Dans Hotspot, principalement 3 algos de GCs Serial GC (-XX:+UseSerialGC) desktop (1 thread) Parallel GC (-XX:+UseParallelGC) desktop/server (n threads mais temps de pause pas garanties) CMS (-XX:+UseConcMarkSweepGC) server (n threads, temps de pause best effort) Et un petit nouveau G1 (-XX:+UseG1GC) server (n threads, soft real time)

Mark & Sweep Phase 1: mark À partir des piles de chaque threads et des variable statiques, le GC marque tous les objets atteignablent (récursivement) Phase 2: sweep Le GC libère la mémoire (comme free) des objets non-marqué Problèmes: plein d'objets ont une durée de vie faible la mémoire n'est pas défragmentée

Mark & Compact Phase 1: mark À partir des piles de chaque threads et des variable statiques, le GC marque tous les objets atteignablent (récursivement) Phase 2: compact Le GC recopie tout les objets marqués dans une autres zones Problèmes: Stop the world Au pire, on a besoin de 2x la place nécessaire

GC générationel Hypothèses: les objets allouées en même temps ont la même durée de vie beaucoup d'objets meurent rapidement Il n'est nécessaire de collecter l'ensemble de la mémoire, les zones recevant des objets vieux peuvent être collecter moins fréquemment (major collection) que les zones recevant des objets jeunes (minor collection)

Generationnel mark & compact/sweep Utilise les 2 techniques et les hypothèses générationnels mark & compact eden -> survivor, survivor -> survivor, survivor -> tenured mark & sweep tenured Class + JITed code, jusqu'à la 1.7 survivor space

Java ne s'optimise pas comme du C Quelle est la complexité du code ci-dessous? Avec un processeur à 1Ghz, combien de temps le calcul prendra t'il? public static void main(string[] args) { int sum = 0; for(int i=0; i<integer.max_value; i++) { for(int j=0; j<integer.max_value; j++) { sum++; } } System.out.println(sum); }

Java ne s'optimise pas comme du C Et si le code est le suivant? public static void main(string[] args) { int sum = 0; for(int i=0; i<integer.max_value; i++) { sum = m(sum); } System.out.println(sum); } private static int m(int sum) { for(int j=0; j<integer.max_value; j++) { sum++; } return sum; }

Java ne s'optimise pas comme du C public static void main(string[] args) { int sum = 0; for(int i=0; i<integer.max_value; i++) { sum = m(sum); } System.out.println(sum); } private static int m(int sum) { for(int j=0; j<integer.max_value; j++) { sum++; } return sum; } Le code est recompilé en code machine à l'exécution! java -server -XX:+PrintCompilation... 72 1 % Test1::m @ 5 (19 bytes) 1470 1 Test1::m (19 bytes) 2836 2 % Test1::main @ 7 (22 bytes)

Optimisations fréquentes Inlining Déroulement de boucle Hoisting des invariants hors des boucles De-virtualisation (CHA) Inlining cache, bi-morphic cache Null check removal Range check removal...

Optimisation du code On optimise pas car cela coute trop cher! Il faut appeler 10 000 fois une méthode avant que le JIT se déclenche donc pas d'optim avant 10 000 appels par contre on choisie le bon algo (sous peine de mort) on ne fait pas deux fois le même calcul on code en suivant le standard les JITs reconnaissent des patterns qu'ils optimisent