Software ubiquitärer Systeme (SuS) Anwendungsentwicklung mit Java https://ess.cs.tu-dortmund.de/DE/Teaching/SS2016/SuS/ Horst Schirmeier, Olaf Spinczyk [email protected]https://ess.cs.tu-dortmund.de/~hsc AG Eingebettete Systemsoftware Informatik 12, TU Dortmund
38
Embed
Software ubiquitärer Systeme (SuS)...Quelle: [1] Nicht nur die Bibliotheken, sondern auch die virtuellen Maschinen unterscheiden sich. Nicht nur die Bibliotheken, ... – Pager, PDAs
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 21
Java Card: Anwendungen● Einsatzgebiete
– Krankenkassenkarten– Bankkarten (EC)– Handy-SIM-Karten– Ausweise– Ziel: nur eine Karte für viele Applikationen
● Anforderungen an die Java Card-Plattform– Sicherheit und Zuverlässigkeit
● Verwaltung und Isolierung der Applikationen auf der Karte– Extrem geringer Ressourcenverbrauch– Für die Domäne passende, standardisierte Packages– Portabilität– Kompatibilität mit existierenden Standards
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 22
Java Card: Was fehlt?● Dynamisches Klassenladen● Security Manager● Garbage Collection● Threads● Klonen von Objekten● Mehrdimensionale Felder
● Datentypen char, double, float und long● Die Java Card-API beschränkt sich auf folgende Pakete:
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 23
Java Card: Applets …● sind persistente Zustandsautomaten, die auf Nachrichten des
Lesegeräts reagieren
● haben (mindestens) folgende Methoden:– install
● Erzeugung und Registrierung der Applet-Instanz
– select● Das Lesegerät spricht das Applet an
– process● Interpretation der Nachrichten (APDUs) vom Lesegerät
– deselect● Das Lesegerät beendet die Kommunikation mit dem Applet
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 24
Java Card: Fazit● Pro:
– Plattformunabhängige Entwicklung für Smart Cards– Unterstützung mehrerer Applikationen auf einer Karte– Dynamische Installation/Deinstallation von Applets– Standardisierte Bibliotheken– Nutzbarkeit von Java-Know-How
● Contra:– Die Sprache ist zwar Java, das Programmiermodell aber nicht.– Essentielle Sprachelemente fehlen– Deutliche Nachteile hinsichtlich der Performance– Vergleichsweise hohe Ressourcenanforderungen
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 25
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 26
Android● Open Handset Alliance (primär Google), 2007
– T-Mobile, Motorola, Samsung, ...
● Vision:“… accelerate innovation in mobile andoffer consumers a richer, less expensive,and better mobile experience.”
● Infrastruktursoftware-Plattform für Smartphones– Open Source
● Diverse Produkte heute verfügbar
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 27
Android: Architektur● Linux und Java – aber anders …
Die Dalvik-VM führt Java-Programmeaus, deren Bytecode in Dalvik-Bytecodeübersetzt wurde.
Die Dalvik-VM führt Java-Programmeaus, deren Bytecode in Dalvik-Bytecodeübersetzt wurde.
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 28
Android: Die Dalvik-VM● Benannt nach einer isländischen Stadt● Hauptunterschiede:
– Java-Bytecode ist stapelbasiert, Dalvik-Bytecode ist registerbasiert● Java-Bytecode lässt sich nicht (direkt) ausführen● Ein Übersetzungschritt ist erforderlich
– Dalvik-Code wurde bis Android 2.2 nur interpretiert● Heute: Trace-basierter JIT-Compiler
● Gründe:– Kompaktheit des Codes– JIT-Compiler wurde als unnötig erachtet, da die Performance-kritischen
Teile nativ ausgeführt werden (Kernel/Libraries)● inzwischen können Anwendungen auch „native code“ verwenden● JIT darf nicht zu viel Speicher benötigen
– Lizenzrechte?
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 29
Android: Größen (statisch)● common system libraries
Quelle: A JIT Compiler for Android’s Dalvik VM Ben Cheng, Bill Buzbee, May 2010
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 31
Android Runtime (ART) (1)● Kompilierung von Android-Apps in Maschinencode zum
Installationszeitpunkt– ab Android 4.4 möglich
● Vorteile:– Dalvik-VM und JIT werden nicht mehr benötigt → weniger Speicher– Kein Tracing/Übersetzen zur Laufzeit → weniger Energie– Linux lädt Programme inkrementell → starten schneller– Alle Programmteile liegen in Maschinencode vor → laufen schnell
● Nachteile:– Keine dynamischen Optimierungen → teilweise auch langsamer
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 32
Android: ART (2)● Partielle Code-Spezialisierung in JIT-Compiler
– nicht bei ARTint myfunc(int par1, int par2, int par3) { int r = 47; if (par1*par2 > 5) { int i; for (i=0; i<par1*par2;i++) { r+=par3*i; } } else r = par1+par2+par3 return r;}
int myfunc(int par1, int par2, int par3) { int r = 47; int i = 35; while (--i) r += i + i; return r;}
int myfunc(int par1, int par2, int par3) { return 16;}
myfunc(7,5,2) myfunc(2,2,12)
Basierend auf der Ausführungshäufigkeit von Funktionen mit bestimmten Parametern (ermittelt vom Trace-JIT) werden Funktionen spezialisiert. Entsprechende Aufrufe werden umgeleitet.
Basierend auf der Ausführungshäufigkeit von Funktionen mit bestimmten Parametern (ermittelt vom Trace-JIT) werden Funktionen spezialisiert. Entsprechende Aufrufe werden umgeleitet.
Quelle: c't 13/2015 „Endlich kompiliert“
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 33
Android: ART (3)● Und wie steht's nun mit der Performance?
● In c't 13/2015 wurden 9 Benchmarks verglichen(relative Performance im Vergleich zu Dalvik)
– Android 4.4/ARM: 99% bis 184%, Durchschnitt 133%– Android 5.1/ARM: 65% bis 238%, Durchschnitt 149%– Android 4.4/Intel: 28% bis 179%, Durchschnitt 74%– Android 5.1/Intel: 47% bis 176%, Durchschnitt 106%
● Fazit:– ART hat das Potential die Performance deutlich zu verbessern– Kinderkrankheit auf Intel-basierten Android-Geräten
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 34
Android: Fazit● Android ist für Smartphones ausgelegt
– Skalierbarkeit ist kein Thema
– Annahme: typischerweise 64–512 MB Speicher, 250–1000 MHz CPU● Heute viel mehr vorhanden!
● Android zeigt, dass …– die Java-VM nicht unbedingt perfekt geeignet ist, um kleine Systeme
zu bauen● Dalvik-Bytecode ist signifikant kleiner
– Ausführung von kompiliertem Maschinencode und Portabilität kein Widerspruch sein müssen
● Übersetzung zum Installationszeitpunkt bei ART
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 35
.NET-Framework für eingeb. Systeme?● Microsoft● Ermöglicht .NET auf
Windows CE/Mobile-Geräten– Moderne Zwischensprache (MSIL)
für mehrere Quellsprachen● C#, VB, J#, C++, …● Ausgelegt auf JIT-Compiler
– Anwendungsentwicklungin MS Visual Studio
– Diverse Bibliotheken● Benutzerschnittstelle, Kommunikation, …● Allerdings an diversen Stellen beschnitten
➔ Größenreduktion des .NET-Frameworks …– Compact: erfordert 12 MB
– Micro: erfordert 256 KB Flash, 64KB RAM (läuft ohne OS, kein JIT)
Quelle: msdn.microsoft.com
06.07.2016 SuS: 06.3 Anwendungsentwicklung mit Java 36