<Insert Picture Here> Snabbare Java

Relevanta dokument
Föreläsning 22. Tobias Wrigstad. Under huven på JVM. Bytekod. JIT. Reflection. Profiling.

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Dugga i Grundläggande programmering STS, åk

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Föreläsning 8: Exempel och problemlösning

Föreläsning 1 Datastrukturer (DAT037)

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Det finns många flaggor till g++,

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

12 Metaprogrammering i Java

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Omprov 11/11. på förmiddagen.

Classes och Interfaces, Objects och References, Initialization

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

OOP Objekt-orienterad programmering

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2010

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Instuderingsfrågor, del D

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Föreläsning 16. Tobias Wrigstad

Software Technology. Josef Svenningsson

Innehåll. Pekare Exempel

Konstruktion av klasser med klasser

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2011

Introduktion till Java

Föreläsning 12: Exempel och problemlösning

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

TENTAMEN OOP

Föreläsning 3: Booleans, if, switch

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Tentamen. Lösningsförslag

Innehåll. Pekare Exempel

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Tillämpad programmering

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Concurrency Saker händer samtidigt. Process En instans av ett program

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Programvaruteknik. Programspråk. Skriptspråk. Inkapsling OOP. Abstraktion. Typsystem. Parallellism. Dynamisk typning. Concurrency

Föreläsning 6: Metoder och fält (arrays)

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

Föreläsning 7-8 Innehåll

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2014

Tentamen i Grundläggande Programvaruutveckling, TDA548

Föreläsning 2. Länkad lista och iterator

Laboration 13, Arrayer och objekt

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Att skriva till och läsa från terminalfönstret

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Assemblerprogrammering - fördjupning

Preliminär elmarknadsstatistik per månad för Sverige 2014

LULEÅ TEKNISKA UNIVERSITET

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

TDDD78 Viktiga begrepp, del 2

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad programmering i Java

Föreläsning 3-4 Innehåll

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Lösningsförslag övning 2.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Tentamen i Grundläggande Programvaruutveckling, TDA548

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Inledande programmering med C# (1DV402) Introduktion till C#

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

OOP Objekt-orienterad programmering

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Modeller, Objekt och Klasser

Klasshierarkier - repetition

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Föreläsning 9: Arv och UML

Programmering i C++ EDA623 Något om C# EDA623 (Föreläsning 14) HT / 17

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Transkript:

<Insert Picture Here> Snabbare Java Nils Eliasson Senior Member of Technical Staff JRockit Java Virtual Machine

Snabbare Java Löftet om prestanda Kort historik Java, 1995 Profilering, Asynkron kodoptimering, 1999 JIT, Just In Time -kompilering, 1999 Visionen - Snabbt som C Stark typning Körtidsinformation Dynamiska optimeringar Det lät bra men vi var inte där

Utvecklingen 8 år senare Vad har förändrats Stenhård konkurrens Erfarenhet Tid Innovation Mognad

Utvecklingen En liten tillbakablick 400% 350% 300% SpecJBB2005 Publikationer 2006-2008 2 socket, 4 CPUer 250% 200% 150% 100% 50% 0% jan mar apr jul aug dec mar apr jun aug jan feb mar apr jul

JVMens bidrag Samma hårdvara 200% 180% 160% 140% SpecJBB2005 1 Socket, 4 CPUer Standardparametrar (Out of the box) 120% 100% 80% 60% 40% 20% 0% R26.1.0 R26.2.0 R26.3.0 R26.4.0 R27.1.0 R27.2.0 R27.3.0 R27.4.0 R27.5.0 R27.6.0

Var finns prestandan? Teori och praktik Automatisk minneshantering Snabb allokering Bump-pointer allocation Trådlokal Heap New Object Free Next Skärpsamlarens körtid proportionell mot mängden live-data Samtidig (Concurrent) och parallell skräpsamling Defragmentering av minnet

Var finns prestandan? Teori och praktik (forts.) Körtidsinformation Profilering Hotspotning och call-profilering är grundläggande Lätt att försämra prestandan Hårdvaruräknare är ännu inte standard Iallafall för produktionsmiljö Multicore-vänligt Naturlig partitionering av VMen

JVMens delsystem Bitar som fallit på plats KODGENERERING JIT-Kompilator Optimerare Krav Effektiv Högkvalitativ kod MINNESHANTERING Skräpsamling Krav Parallel Samtidig (Concurrent) Resurssnål JAVA / APPLIKATION Lås Monitorering, Profilering Krav Låg kostnad Adaptiv KÖRTIDSMILJÖN (RUNTIME) Klassladdning, Reflektion, Verifikation Trådhantering Krav Minimalt med blockerande tillstånd Snabba trådstop

Java till maskinkod JAVA JAVA BYTEKOD Javac JVM public static void main(string [] args) { System.out.println( Hello world! ); public static void main(java.lang.string[]); 0: getstatic #2; //Field 3: ldc #3; //String 5: invokevirtual #4; //Method 8: return MASKINKOD sub $0x04,%esp mov 0x04fa9bc4,%esi mov 0x05cd5498,%edi mov 0x0(%esi),%ecx call 0x05020F00 pop %ecx

JIT-Kompilator Blockerande Javatråden kompilerar sin egen kod Granulariteten är en metod Snabb översättning utan finesser Singel-pass linjär registerallokering

Optimeraren Het kod Javatrådarna övervakas av en hotspot -tråd Statistisk sampling Adaptiv period Het kod schemaläggs för asynkron optimering Separata optimeringstrådar Fullständig optimering Aggressiv inlining Spekulativa antaganden Gamla anrop skrivs om till den nya bättre koden Onåbar kod skräpsamlas

Effektiv kod del 1 Förenkla Konstant- och uttryckspropagering Möjliggör andra optimeringar Styrkereduktion Förenkla uttryck Dödkodseliminering Ta bort kod som är onåbar Konstantpropagering int i = 8; int i = 8; int j = i * a; Int j = 8 * a; Styrkereduktion int i = 3 + 5; int i = 8; int a[] = new int[15]; int a[] = new int[15]; int alen = a.length; int alen = 15; Dödkodseliminering if (i == 8) { foo(); // Givet: i = 8; foo(); } else { } bar();

Effektiv kod del 2 Utöka möjligheterna Inlining Lyft in kod från en anropad metod Specialisering för en specifik anropsplats class Point { int x; public void Point(int x) { } this.x = x; public void add(point p) { x += p.x; Point a = new Point(17); b.add(a); Inlina Point a = new Point(); a.x = 17; // konstruktorn b.x += a.x; // anropet till add() Dematerialisera Point a = new Point(); int temp1 = 17; b.x += temp1; Förenkla b.x += 17; }

Effektiv kod del 3 Utöka möjligheterna forts. Versionering / Specialisering Antagande om typ eller värde Klasshirarki-analys Profilering Specialisering metodx(object object) { object.tostring(); // virtuellt anrop metodx(object object) { if (object instance_of MyMuffin) { MyMuffin muffin = (MyMuffin) object; muffin.tostring(); // Snabba fallet // Fixt - Nu kan vi inlina! } else { object.konvertera(); }

Effektiv kod del 4 Javatransformationer StringBuilder Varje anrop till append() kan orsaka en om allokering om bufferten tar slut Transformera koden så att kopieringen görs först vid behov Då vet vi längden! public StringBuilder append(string str) { int newcount = count + str.length(); if (newcount > capacity) expandcapacity(); str.getchars(0, str.length(), value, count); count = newcount; return this; } StringBuilder b = new StringBuilder(); b.append(page.header()); b.append(page.content()); b.append(page.footer()); agent.write(b.tostring()); public StringMaker append(string str) { strings[size++] = str; return this; }

Utmaningar Att låtsas vara Java Javaspecifikationen begränsar oss Exception-sematiken Arrayboundscheckar, Nullpointers Krav på ordning! Dynamisk klassladdning Världen förändras Omatchade lås Bytekodsgenerering Obfuskering

Avslut Hur långt har vi kommit? Vi börjar nå visionen Snabbt som C Nya krav Paustider Determinism Vetenskapliga beräkningar Massiv parallella datorsystem Finns fortfarande utrymme för förbättring Nya hårdvara Nya möjligheter Nya högproduktiva språk Java är snabbt i jämförelse!

JRuby Otrimmad fib_rec fib_iter eval enumerable each_line_long_string each_line_short_string_noln each_line_small_string each_line_from_file define_baz define_bar define_evaled define_foo define_simple_method constantize_no_eval constantize_no_re constantize_full bigdecimal_1000 bigdecimal_100 JRockit HotSpot c-ruby