background image

Języki Programowania 

 

 

 

Podstawy Java. Maszyny wirtualne. 

Kompilacja 

Kompilator

 

tłumaczy program zapisany w języku 

wysokiego poziomu na język maszynowy 

my_prog.c 

my_prog.exe 

program wykonywalny 

background image

Kompilacja i platformy 

Każda

 

platforma

 

(procesor + system operacyjny) ma własne unikatowe 

wymagania odnośnie postaci kodu programu wykonalnego 

Dla n języków i m platform potrzebne jest n 

 

m kompilatorów 

PC + UNIX 

PC + Windows 

PC + MacOS 

Maszyna wirtualna (VM) 

Maszyna wirtualna (VM 

─ 

virtual machine

) jest hipotetycznym 

(wirtualnym) komputerem 

 

VM można uruchomić na dowolnym rzeczywistym komputerze jako 
symulator (emulator) 

 

Język maszyny wirtualnej jest językiem pośredniczącym między 
oprogramowaniem a rzeczywistym komputerem. Zapis programu w 
tym języku nosi nazwę 

bytecode 

 

Dla dowolnego języka wystarczy tylko jeden kompilator tego języka 
na język VM 

 

background image

Koncepcja VM 

Niezależnie od liczby platform, dla n języków potrzeba n 
kompilatorów 

Maszyna wirtualna 

– VM 

PC + UNIX 

PC + Windows 

PC + MacOS 

Wady koncepcji VM 

Utrata efektywności 

 

Stosując wspólną maszynę wirtualną VM dla różnych platform sprzętowych nie 

można wykorzystać w pełni jej unikatowych cech przyspieszających wykonanie 

niektórych operacji 

akceleratory graficzne 

operacje DSP ... 

 Sprowadzenie zapisu programu do zunifikowanego bytecode prowadzi do utraty 

efektywności języków w zakresie pewnych konstrukcji programistycznych 

rekursja itp.. 

 

 Idealna maszyna wirtualna w praktyce nie istnieje 
 

W praktyce decydując się na określoną VM dokonuje się kompromisu, godząc 

się na utratę efektywności 

Stąd szybkość programów interpretowanych przez VM jest zwykle mniejsza od 

szybkości programów kompilowanych bezpośrednio na daną platformę 

programy napisane w języku Java są wolniejsze od programów napisanych w języku 
C/C++ 
 
 

background image

JVM 

– wirtualna maszyna Java 

Java 

Maszyna wirtualna Java 

JVM 

PC + UNIX 

PC + Windows 

PC + MacOS 

Maszyna wirtualna Java (

Java Runtime Engine

) jest dostępna dla niemal 

wszystkich platform 

 

JVM dla Windows to 

java.exe 

Maszyny wirtualne 

 Maszyny wirtualne 

dla jednego języka 

 wielu platform 
były znane już wcześniej, ale nie zdobyły większej popularności 
 

Najbardziej dojrzałe rozwiązania wcześniejszych VM to 

 Pascal: 

p-

Machine (połowa lat 80-tych XX w.) 

 Smalltalk: Smalltalk Bytecode Interpreter 
 Prolog: 

WAM 

 

 Smalltalk 80

 

może być uważany za protoplastę języka Java. Rynek 

nie był w roku 1980 przygotowany na taką ideę. Smalltalk 
wyprzedził swój czas o ponad 20 lat 

background image

Wielojęzyczne JVM 

Współczesne implementacje JVM są zdolne do interpretacji 

bytecode

 

generowanego przez różne języki 

10 

Kompilacja programu Java 

Program źródłowy z rozszerzeniem 

.java

 jest kompilowany przez 

kompilator 

javac

 na plik o tej samej nazwie, ale z rozszerzeniem 

.class 

Plik ten zawiera 

bytecode

 dla JVM 

Source code      

Hello.java 

Hello.class 

Hello.java 

Hello.class 

background image

11 

Wykonanie programu Java 

 Bytecode

 jest wykonywany przez JVM 

Bytecode może również pochodzić z innych kompilatorów, np.. JPython, 
JBasic lub Smalltalk/JVM 

Hello 

Hello.class 

Hello.class 

12 

JDK 

– główne elementy 

Java Virtual Machine 

java.exe 

Narzędzia dokumentacji 

javadoc.exe 

Kompilator Java 

javac.exe 

background image

13 

Środowisko JDK / DOS 

Utworzyć program źródłowy 

hello.java 

 

W linii poleceń DOS wywołać 
kompilator 

javac

 

i skompilować 

program 

hello.java 

 

Powstanie bytecode o nazwie 

hello.class 
 

Uruchomić program w JVM 

public class hello{ 
  public static void 
   main(String[] args) 
     { System.out.println 
        ("Hello World"); } 

 

 
C:>javac hello.java 
 
 
C:>java hello 
Hello World 

14 

Środowisko JDK / Windows 

Utworzyć program źródłowy 

hello.java 

 

Wywołać konsolę 

cmd 

 

Wywołać kompilator             
>

javac hello.java   

Powstanie bytecode o nazwie 

hello.class 
 

Uruchomić program w JVM    
>

java hello 

 

Na konsoli                             

pojawi się                                  
tekst                                     

Hello World 

background image

15 

Środowisko JDK / Windows 

Metoda pisania, kompilowania i uruchamiania programów podana na 
poprzednim slajdzie działa, ale jest anachroniczna 

Dziś nie posługujemy się już linią poleceń, bo jest to niewygodne 

Stosuje się specjalnie zaprojektowane graficzne środowiska uruchomieniowe 

Interaktywne, graficzne środowiska uruchomieniowe dla języka Java 

 JBuilder (Borland) 
 NetBeans (Sun Microsystems) 

Swing 

– do budowy GUI 

 Eclipse 

 

Zaletą (ale też i wadą) wymienionych narzędzi jest bogactwo opcji, funkcji 

Nauka jest długa i żmudna 

 Dokumentacja jest bardzo obszerna 

 

Dlatego opracowano uproszczone środowiska uruchomieniowe, przeznaczone 
głównie do celów dydaktycznych 

 BlueJ (University of Kent, Deakin University) 
 jGRASP