20.07.2013 Aufrufe

Programmieren in Java - LSW

Programmieren in Java - LSW

Programmieren in Java - LSW

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK<br />

BEREICH DATENTECHNIK V – JV – 212 – 00 – TH – 03<br />

-----------------------------------------------------------------------------------<br />

<strong>Java</strong> als Programmiersprache und Ausführungsplattform (2)<br />

• Elementare Charakteristika der Programmiersprache <strong>Java</strong>, Forts.<br />

◇ Sicherheit (secure)<br />

<strong>Java</strong> stellt mehrere Sicherheitsschichten zur Verfügung, die es ermöglichen, Code aus e<strong>in</strong>em a-priori unsicheren Netz-<br />

werk (wie z.B. das Internet) herunterzuladen und mit großer – wenn auch nicht 100%-iger Sicherheit – auszuführen<br />

(z.B. Applets, dynamisches Laden von Klassen).<br />

Im wesentlichen handelt es sich hierbei um :<br />

▻ <strong>Java</strong>-Programme können weder direkt zum Speicher zugreifen (ke<strong>in</strong>e Po<strong>in</strong>ter), noch Array- oder Str<strong>in</strong>ggrenzen<br />

verletzen. Dies stellt e<strong>in</strong>en wesentlichen Schutz gegen "bösartigen" Code dar.<br />

▻ Alle <strong>Java</strong>-Klassen werden beim Laden auf Richtigkeit und Zuverlässigkeit überprüft ("byte-code verification",<br />

z.B. Überprüfung auf Stack-Über- oder Unterlauf, illegale Byte-Codes usw)<br />

▻ Der Klassenlader sucht immer zuerst nach dem lokalen Vorhandense<strong>in</strong> e<strong>in</strong>er Klasse. Dies stellt e<strong>in</strong>en gewissen Schutz<br />

gegen das "Unterschieben" e<strong>in</strong>er manipulierten Klasse ("class spoof<strong>in</strong>g") dar<br />

▻ E<strong>in</strong>e weitere Sicherheitsschicht stellt das "Sandkasten-Modell" ("sandbox model") dar, das unsicherem Code sicher-<br />

heitsrelevante Zugriffe verweigert.<br />

Z.B. ist Applets jeglicher Zugriff zum lokalen Dateisystem verboten.<br />

Weiterh<strong>in</strong> benötigen alle Bibliotheksklassen, die sicherheitsrelevante Operationen ausführen (z.B. Dateizugriff oder<br />

Netzwerkzugriff), e<strong>in</strong> SecurityManager-Objekt, das sie vor e<strong>in</strong>em entsprechenden Zugriff um Erlaubnis fragen.<br />

Die von diesem freizugebenden Zugriffe werden durch e<strong>in</strong> Security Policy File festgelegt.<br />

◇ Unterstützung von Multithread<strong>in</strong>g (multithreaded)<br />

<strong>Java</strong> enthält Sprachmittel und Bibliotheksklassen zur e<strong>in</strong>fachen Realisierung von Threads.<br />

Dadurch ist es <strong>in</strong> <strong>Java</strong> sehr leicht, Multithreaded-Anwendungen zu realisieren.<br />

• Elementare Charakteristika der Ausführungsplattform <strong>Java</strong><br />

◇ Interpretierte Programmausführung (<strong>in</strong>terpreted)<br />

Der <strong>Java</strong>-Compiler erzeugt ke<strong>in</strong>en Masch<strong>in</strong>encode sondern sogenannten Byte-Code, der zur Ausführung von e<strong>in</strong>em<br />

Interpreter, der <strong>Java</strong> Virtuellen Masch<strong>in</strong>e (<strong>Java</strong> Virtual Mach<strong>in</strong>e, JVM), abgearbeitet wird. Die JVM bildet die von<br />

<strong>Java</strong> zur Verfügung gestellte Ausführungsplattform. Zur Abarbeitung e<strong>in</strong>es <strong>Java</strong>-Programms muß diese Ausführungs-<br />

plattform, also die JVM, gestartet werden. Dieser wird der – <strong>in</strong> e<strong>in</strong>er Datei enthaltene – Byte-Code der Start-Klasse als<br />

Parameter übergeben. Die Byte-Codes der weiteren Klassen des Programm werden jeweils bei Bedarf von der JVM<br />

geladen. Der Byte-Code kann als "Mach<strong>in</strong>encode" der JVM aufgefasst werden.<br />

◇ Architektur-Neutralität und Portabilität (architecture neutral and portable)<br />

E<strong>in</strong> <strong>Java</strong>-Programm ist auf jedem System lauffähig, das e<strong>in</strong>e <strong>Java</strong> Virtuelle Masch<strong>in</strong>e zur Verfügung stellt.<br />

Der vom Compiler erzeugte Byte-Code ist architektur-neutral. Er enthält ke<strong>in</strong>e implementierungsabhängigen<br />

Elemente. Auch die Sprache <strong>Java</strong> selbst ist vollkommen implementierungsunabhängig. U.a. legt <strong>Java</strong> die Größe der<br />

e<strong>in</strong>fachen Datentypen exakt fest. Damit ist – sogar e<strong>in</strong> übersetztes – <strong>Java</strong>-Programm 100% portabel.<br />

Suns Motto für <strong>Java</strong> lautet deswegen :<br />

Write Once, Run Anywhere<br />

◇ Dynamisches Verhalten (dynamic)<br />

Jede <strong>Java</strong>-Klasse kann zu jeder Zeit <strong>in</strong> e<strong>in</strong>e laufende Virtuelle Masch<strong>in</strong>e geladen werden. E<strong>in</strong>e derart dynamisch gelade-<br />

ne Klasse kann dann dynamisch <strong>in</strong>stantiiert werden. Jede geladene Klasse wird durch e<strong>in</strong> Objekt der Klasse Class<br />

repräsentiert. Dies ermöglicht die Ermittlung von Informationen über e<strong>in</strong>e Klasse zu Laufzeit (Reflection API)<br />

◇ Hohe Leistungsfähigkeit (high-performance)<br />

Interpretierter Code ist zwar pr<strong>in</strong>zipiell immer langsamer als direkt ausgeführter Masch<strong>in</strong>encode, Sun unternimmt aber<br />

große Anstrengungen, die JVM so effizient und schnell wie möglich zu realisieren. Heutige JVMs enthalten "just <strong>in</strong> time"<br />

Compiler (JIT), die Byte-Code vor der ersten Ausführung <strong>in</strong> Masch<strong>in</strong>en-Code übersetzen. Ergänzt wird dieses Konzept<br />

durch adaptive Entscheidungsalgorithmen, die zur Laufzeit den Code bezüglich Leistungsengpässen analysieren und<br />

wenig verwendeten Code nicht übersetzen, laufzeit-kritischen dagegen bestmöglich optimieren ("Hot Spot" JVM).<br />

Darüberh<strong>in</strong>aus kann besonders zeitkritischer Programm-Code <strong>in</strong> e<strong>in</strong>er <strong>in</strong> Masch<strong>in</strong>en-Code direkt übersetzbaren<br />

Sprache formuliert, <strong>in</strong> nativen Masch<strong>in</strong>en-Code übersetzt und mittels des <strong>Java</strong> Native Interfaces (JNI) von der JVM<br />

aufgerufen werden.<br />

All diese Maßnahmen ermöglichen es, dass <strong>Java</strong>-Programme bezüglich der Ausführungsgeschw<strong>in</strong>digkeit zunehmend<br />

mit compilierten C/C++-Programmen konkurieren können.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!