Java - la plateforme. Java – la plateforme ● Java ? ● VM ● GC ● JIT.

Slides:



Advertisements
Présentations similaires
Fonctionnement MÉMOIRE de la JVM
Advertisements

LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
Présentation de Java Stéphane Frénot INSA lyon
Analyse des algorithmes: une introduction. La question abord é e dans ce chapitre est la suivante: Comment choisir parmi les diff é rentes approches pour.
JAVA Jean-Jacques LE COZ. Présentation Langage de l'éditeur Sun Microsystems Divisé en trois parties Java standard SDK Java Entreprise J2EE Java Micro.
Réflexion sur un exemple possible de projet proposé en I.S.N.
Principes de l'orienté objet Jean-Jacques LE COZ.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Cours de Langage C Les structures
L’utilisation des formulaires pour un responsable de Centre Régional.
CHAftITREI ARCHITECTURE de BASE. Modèle de Von Neumann Langage d’assemblage1 John Von Neumann est à l'origine d'un modèle de machine universelle de traitement.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
Les ORMs ● Faire coexister le monde relationnel et objet.
Développement à l'Aide de Langages Dynamiques : Smalltalk module IT308: Méthodologies et outils logiciels Nada Ayad, Damien Cassou et Annabelle Souc.
Vérification formelle d'une implémentation d'un gestionnaire de mémoire pour un compilateur certifié Tahina Ramananandro École normale supérieure Xavier.
1 Programmation Orientée Objet ● Qu'est-ce qu'un objet ● Collaboration des objets ● Les classes ● Relations entre les classes – “Utilise”, “Contient”,
Ruby votre prochain langage de programmation préféré Guillaume Cottenceau LinuxDays Genève 22 Mai 2007.
1 Java Avancé Le langage Java Rémi Forax
1 Créer un extension OpenOffice.org avec Eclipse Créer une extension OpenOffice.org avec Eclipse.
1 Programmation en C++ Cycle de vie ● La vie d'un objet ● Destructeur ● Gestion de mémoire dynamique.
Refonte du portail eaufrance Présentation du cadre de référence pour avis GCIB – 14/10/2014 – Anne Macaire.
DIAGRAMME DE DEPLOIEMENT Exposé de: MBALLA MEKONGO Michèle MBOUNA FEUZE William SIEYADJEU Alex Lionel CHOPGWE Leonard NDUMATE Landry TIDJON Lionel.
Présentation de Java 2006 INSA lyon
Android PACT 2016 Encadrement Informatique.
La technologie des mémoires
JAVA.
LOG2420 – Automne 2016 Chargé de cours : Mathieu Laprise
Expérience de l’Université de Boumerdes
Environnement de développement des BD
A JavaScript library for building user interfaces
Réglage des garbage collectors (GC) sur JDK1
Guide de formations IBM FileNet
LES TABLEAUX EN JAVA.
Pas de variable globale
Détection des erreurs.
Concurrence Opérations atomiques Rémi Forax
JAVA et POO : Notion d'héritage
Javadoc et débogueur Semaine 03 Version A16.
Principes de programmation (suite)
Master Réseaux et Systèmes Distribués (RSD) Algorithmique des systèmes
Java EPITECH 2009
Algorithmique & Langage C
Programmation Orientée Objet I. Introduction
Présentation Structure données abstraite (TDA) Rappel : File
VLSM Exercice N°1 ccnp_cch.
Semaine #4 INF130 par Frédérick Henri.
Techniques du Data Mining
Puzzler.
Présentation des EJB Enterprise Java Beans.
Sfaihi Yassine Rabai Fatma Aissaoui Walid
Chapter 12: Structures de données
Programmation Orientée Objet
Plus de 4000 langages....
Développement d’applications interactives
Programmation Android Première application Android
Adaptive Neuro Fuzzy Inference System (ANFIS)
Auditeur: Léonardo AMODIO Cours: NFE107
Assembleur, Compilateur et Éditeur de Liens
Le Java premiers pas.
Programmation Android Composantes d’une application
Ressources continues (depuis 2006)
Langages de programmation TP11
Programmation par Objets et Java
SSAS Tabulaire Optimisation
Java EPITECH 2009
Le langage C# : Partie 1.
INTERFACE ET POLYMORPHISME
Présenté par Viviane Lévesque
STREAMS (et fichiers).
Retour sur les interfaces
Transcription de la présentation:

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.7 (~ classes) : ● java.lang, java.lang.reflect, java.lang.invoke ● java.util, java.util.prefs, 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 aka Java 2 (1999) ● JDK 1.3 (2001) ● JDK 1.4 (2002) ● JDK 1.5 aka Java 5 (2004) ● JDK 1.6 aka Java 6 (2006) ● JDK 1.7 aka Java 7 (2011) 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 récemment) 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 : ● N'importe qui peut contribuer, fixer des bugs, etc. ● Créer votre JDK :) hg fclone 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 ● 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 Compilateur Plateforme + OS Codes en Ascii 010

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

Interpreteur ? ● Certain langages ne possèdent qu'un interpreteur ● Perl, Python, Ruby – Implantation alternatives (qui compile à la volée) ● Python: Jython/PyPy/unladen-swallow ou Ruby: JRuby ● 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 ● 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 pas encore en prod ● G1 (-XX:+UseG1GC) – Server (n threads, soft real time)

Mark & compact/sweep ● Phase 1: mark ● À partir des piles de chaque threads et des variable statiques, le GC marque tous les objets atteignablent ● Phase 2: compact ● Le GC recopie tout les objets marqués dans une autres zones ● Phase 2: sweep ● Le GC libère la mémoire (comme free) des objets non- marqué

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 survivor space 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

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++) { for(int j=0; j<Integer.MAX_VALUE; j++) { sum++; } System.out.println(sum); } Quelle est la complexité du code ci-dessous ? Avec un processeur à 1Ghz, combien de temps le calcul prendra t'il ?

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; } Et si le code est le suivant ?

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; } java -server -XX:+PrintCompilation % 5 (19 bytes) Test1::m (19 bytes) % 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 fois une méthode avant que le JIT se déclenche donc pas d'optim avant 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