Hlavní navigace

Java na Linuxu, úvod

binary runner

Stále více aplikací se píše v Javě. Důvodů je více než jen nezávislost na operačním systému. Z těch hlavních jmenujme alespoň velký výběr aplikačních rozhraní a čistě objektový přístup podporující tvorbu aplikací z komponent (beans a enterprise beans). Pro zájemce o vývoj javových aplikací na Linuxu jsou určeny následující kapitoly popisující základních vývojové nástroje a jejich zprovoznění na Linuxu.

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í:

  1. Vznikne zdrojový kód v jazyce Java. V každém souboru <class_name>.java je uložena definice třídy <class_name>.
  2. Kompilátor převede zdrojový kód na platformně nezávislý bytecod, který ukládá do souborů (*.class). Co soubor, to třída.
  3. 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í:

  1. 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.
  2. 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“).
  3. 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.

Našli jste v článku chybu?