Java Development Kits (JDKs)
Java není konkrétní softwarový balík, jde o tři základní specifikace – Java Language Specification definuje jazyk, Java 2 Platform API Specification základní třídy a Java Virtual Machine Specification prostředí pro běh aplikací. Jejich kombinací dostáváme vývojové prostředí pro Java aplikace, tzv. Java Development Kit (JDK), obsahující zejména kompilátor, JVM a základní třídy. Pro Linux jsou dostupná JDK Sun Java 2 SDK, Kaffe a IBM Java 2 SDK. Co najdete v každém JDK:
- knihovnu základních tříd, tzv. core classes
- kompilátor javac a JVM java
- debugger jdb
- generátor dokumentace javadoc
- manager Java archivů (JAR) jar a jarsigner na jejich podpisování
Technologie Javy
Vývojový cyklus javové aplikace je typicky následující:
- Vznikne zdrojový kód v jazyce Java. V každém souboru <class_name>.java je uložena definice třídy <class_name>.
- Kompilátor převede zdrojový kód na platformně nezávislý bytecod, který ukládá do souborů (*.class). Co soubor, to třída.
- Spustí se Java Virtual Machine (JVM), jako argument je mu předán název hlavní třídy. JVM natáhne třídy z patřičných adresářů (viz dále), pak podle jména třídy <class_name> otevře soubor <class_name>.class a hledá v něm metodu main. Pokud uspěje, začne interpretovat bytecod třídy.
Kompilátor i JVM hledá a načítá třídy v pořadí:
- boostrap/core classes – Třídy
java.*
a další tvořící oficiální jádro Javy. Archivy, které je obsahují, typicky rt.jar, jsou umístěny v adresáři JDK jre/lib. - extension classes – Třídy
javax.*
a další rozšiřující jádro Javy přes Java Extension Framework. Jsou obvykle umístěny v adresáři JDK jre/lib/ext. Ve standardní distribuci to může být třeba Java Cryptography Extension (JCE)(do jádra zřejmě nezařazená, aby toho nezneužívali ti zlobiví teroristi) nebo Java Servlet API (pro „javová CGI“). - user classes – Další třídy nevyužívající mechanismus Java extensions, jejich umístění určuje obsah proměnné CLASSPATH.
Interpretovaný kód je pochopitelně pomalejší než kód kompilovaný. Důvodem je režie interpretu a někdy i nedostatky v optimalizaci. To se vývojáři JVM snaží řešit pomocí techniky tzv. Just-In-Time kompilace, kdy se na požádání bytecod kompiluje do nativního kódu. Zrychlení je údajně deseti- až stonásobné, ovšem vzhledem k době překladu to není právě optimální pro krátce běžící aplikace. Zřejmě jakýmsi kompromisem je HotSpot od Sun Microsystems, kdy JVM monitoruje prováděný kód a optimalizuje často prováděné části, a to i v průběhu debugování.
Java Archive (JAR)
JAR (Java Archive) je platformně nezávislý formát pro archivaci souborů. Všechny Java extensions jsou distribuovány v JARech. Používá ZLIB kompresi ZIPu, a aby se to nepletlo, syntax utility jar se dost podobá taru. Od verze JDK 1.3 může JAR pro rychlejší přístup ke svému obsahu mít i JarIndex, informace o obsahu adresářů je pak uložena v jednoduchém textovém souboru INDEX.LIST v adresáři META-INF nalézajícím se v kořeni JARu. Index v JARu vytvoříte příkazem jar -i <file>.jar
.
Příště si povíme něco o jednotlivých JDK.