-
Hintergrund der Erfindung
-
1. Gebiet der Erfindung
-
Diese
Erfindung betrifft das Gebiet der Computersoftware und insbesondere
ein Verfahren und eine Vorrichtung zur automatischen Optimierung
der Ausführung
eines Computerprogramms.
-
Teile
der Offenbarung dieser Patentunterlagen können Material enthalten, das
dem Urheberrechtsschutz unterliegt. Der Inhaber des Urheberrechts
hat keinen Einwand, wenn jemand die Patentunterlagen oder die Patentoffenbarung,
wie sie in der Akte oder den Aufzeichnungen des Patentamts erscheinen,
bildtechnisch reproduziert, behält
sich aber alle Urheberrechte darüber
hinaus vor. Sun, Sun Microsystems, das Sun-Logo, Java und alle auf
Java basierenden Marken und Logos sind Marken oder eingetragene
Marken von Sun Microsystems, Inc., in den USA und anderen Ländern.
-
2. Technischer
Hintergrund
-
Die
Verwendung von Netzen für
die Verteilung von Computerprogrammen ist enorm angewachsen, insbesondere
in dem Bereich des Internets und des World Wide Web. Ein Problem
beim Verleiten großer
Computerprogramme über
ein Netz besteht darin, daß viel
Zeit benötigt
wird, um das Programm herunterzuladen und zu initialisieren. Dieses Problem
läßt sich
durch einen Überblick über die
aktuellen Verfahren zum Verteilen eines Computerprogramms und von
Dokumenten über
Computernetze verstehen.
-
Internet
-
Computerprogramme
und Dokumente können
beide über
das Internet verteilt werden. Das Internet ist ein weltweites Netz
von miteinander verbundenen Computern. Ein Client bzw. ein Internet-Client bezeichnet üblicherweise
den Computer, den eine Person benutzt, um auf das Internet zuzugreifen.
Ein Internet-Client greift auf andere Computer auf dem Internet über einen
Internet-Provider zu. Ein Internet-Provider ist eine Organisation,
die einem Client den Zugriff auf das Internet ermöglicht (zum
Beispiel über
eine analoge Telefonleitung oder über eine Integrated Service
Digital Network (ISDN)-Leitung).
-
Dokumentenverteilung über ein
Netz
-
Ein
Client kann zum Beispiel ein Dokument von einem anderen Computer/Client
unter Verwendung des Internets herunterladen oder eine elektronische
Mail-Nachricht an diesen senden. Eine Art einer Datei, die ein Client
herunterladen kann, ist als eine Web-Seite bekannt. Eine Web-Seite
enthält
Text, Bilder und andere Arten von Dateien, die dem Client unter
Verwendung eines Web-Browsers angezeigt werden. Ein Web-Browser
ist ein Softwareprogramm, das auf dem Client ausgeführt wird
und das Hypertext Transfer Protocol (HTTP) verwendet, um Web-Seiten
von einem Server über
das Internet abzurufen. HTTP ist ein Satz von Regeln für das Austauschen
von Dateien (Textdateien, Bilddateien, Sounddateien, Videodateien
und andere Arten von Dateien). Netscape Navigator und Internet Explorer sind
beides Beispiele von weitverbreiteten Web-Browsern, die das HTTP-Protokoll
verwenden. (Es ist zu beachten, daß HTTP nur ein für den Dateiaustausch
verfügbares
Protokoll ist. Verschiedene andere Protokolle können auch benutzt werden).
-
Anzeigen von Dokumenten
(oder Dateien) unter Verwendung eines Web-Browsers
-
Die
Hypertext Markup Language (HTML) wird benutzt, um zu beschreiben,
wie eine Web-Seite dargestellt
werden soll. Eine HTML-Beschreibung umfaßt typischerweise einen Satz
von „Markup"-Symbolen. Ein HTML-Dokument
oder eine Datei, welche die „Markup"-Symbole für eine Web-Seite enthält, wird
zu dem Clientcomputer übertragen.
Der Web-Browser,
der bei dem Client ausgeführt
wird, analysiert die „Markup"-Symbole in dem HTML-Dokument
syntaktisch und erzeugt eine Web-Seite aufgrund der Informationen
in dem HTML-Dokument und zeigt diese an. Damit legt das HTML-Dokument die
Web-Seite fest, die während
der Laufzeit auf dem Browser erzeugt wird. Beispielsweise führt der
folgende Satz von „Markup"-Symbolen dazu, daß der Browser
einen Titel, einen Kopf und ein Bild, welches sich „image.jpg" nennt, auf einer
Web-Seite anordnet:
<HTML>
<HEAD>
<TITLE>This is the documents
title</TITLE>
</HEAD>
<BODY>
<H1>This text displayed
using heading level one</H1>
<IMG SRC=‶http://java.sun.com/image.jpg‶>
</BODY>
</HTML>
-
Die „Markup"-Symbole umgeben
typischerweise einen HTML-Befehl. Das Symbol „<" zeigt
den Beginn eines HTML-Befehls an, und das Symbol „</" zeigt das Ende eines
HTLM-Befehls an.
Jeder Anfang- oder Endbefehl besitzt ein entsprechendes „>", um den Abschluß dieses entsprechenden Befehls anzuzeigen.
Die Informationen, die der HTML-Befehl ausgibt, sind typischerweise
zwischen dem Symbol „>" des Startbefehls und dem Symbol „</" des Endbefehls enthalten.
Ein HTML-Befehl gibt dem Browser an, was mit dem Informationsblock,
der zwischen den zwei Befehlen enthalten ist, zu tun ist. In dem
obigen Beispiel sind „<HTML>", „</HTML>", „<TITLE>" und „</TITLE>" Beispiele
von HTML-Befehlen, die von „Markup"-Symbolen umgeben
sind.
-
Wenn
ein Web-Browser ein HTML-Dokument empfängt, stellt er die zwischen
jedem Satz von „Markup"-Symbolen enthaltenen
Informationen in einer Weise dar, die den ausgegebenen HTML-Befehlen
entsprechen. Zum Beispiel weist der Text „<TITLE>This
is the document title</TITLE>" den Web-Browser an, den Text „this is
the document title" in
die Titelleiste des Web-Browsers zu plazieren.
-
Einige
HTML-Befehle besitzen Attribute. Der HTML-Befehl „<IMG>" besitzt zum Beispiel ein Attribut „SRC=". Der Befehl <IMG> teilt dem Web-Browser
mit, ein Bild anzuzeigen, und das Attribut „SRC=" bestimmt den Ort und den Namen des
anzuzeigenden Bildes. Zum Beispiel sagt die Anweisung „<IMG SRC="http://java.sun.com/image.jpg>" dem Web-Browser, ein Bild mit dem Namen image.jpg
anzuzeigen, das von dem Web-Server mit der Adresse „http://java.sun.com" erlangt werden kann.
-
Verteilen
von Computerprogrammen über
das Netz
-
Zusätzlich zum
Abrufen von Dokumenten, die „Markup"-Symbole enthalten,
kann ein Client auch das Internet benutzen, um andere Dateien, wie Computerprogramme,
von anderen Computern, die sich auf dem gleichen Netz befinden,
zu erlangen. Es existieren verschiedene Mechanismen, um Computerprogramme
unter Verwendung des Internets oder anderer Arten von Computernetzen
abzurufen. Um die Probleme und die Nachteile zu verstehen, die mit derzei tigen
Ansätzen
zum Verteilen von Computerprogrammen über ein Netz verbunden sind,
ist ein Überblick über Programmierumgebungen
hilfreich.
-
Die von der Programmiersprache
Java benutzte Programmierumgebung
-
Java
ist eine objektorientierte Programmiersprache und die Programme,
die in der Programmiersprache Java geschrieben sind, umfassen mehrere verschiedene
Klassen und Schnittstellen. Im Unterschied zu vielen Programmiersprachen,
in denen ein Programm in einen maschinenabhängigen, ausführbaren
Programmcode kompiliert wird, werden Programme, die in der Programmiersprache
Java geschrieben sind, in maschinenunabhängige Bytecode-Klassendateien kompiliert.
Jede Klassendatei enthält
Code und Daten in einem plattformunabhängigen Format, welches das
Klassendateiformat genannt wird. Das Computersystem, welches als
das Ausführungsvehikel
dient, enthält
ein als virtuelle Maschine bezeichnetes Programm, welches für die Ausführung des
Bytecodes verantwortlich ist. Die virtuelle Maschine stellt ein
Abstraktionsniveau zwischen den maschinenunabhängigen Bytecodeklassen und den
maschinenabhängigen
Befehlssatz der unterliegenden Computerhardware zur Verfügung. Virtuelle Maschinen
existieren für
eine Auswahl verschiedener Betriebssysteme. Ein „Klassenlader" in der virtuellen
Maschine ist für
das Laden der Bytecodeklassendateien verantwortlich, wie sie benötigt werden, und
entweder führt
ein Interpretierer die Bytecodes direkt aus oder ein „Just-in-time"(JIT)-Kompilierer (Echtzeitkompilierer)
transformiert die Bytecodes in Maschinencode, so daß diese
von dem Prozessor ausgeführt
werden können.
-
Die 1A stellt
ein Beispiel einer Programmierumgebung dar, die für die Programmiersprache Java
anwendbar ist. Wenn diese Programmierumgebung auf einem Clientcomputer 111 bis 113 (1B) installiert
ist, kann dieser Computer diese Programme ausführen. Die Programme laufen
in einer Java-Laufzeitumgebung 103 (Java Runtime Environment
JRE) ab. Die JRE 103 enthält einen Klassenlader 104,
einen Bytecode-Verifizierer 105 und eine oder mehrere Klassen 106.
Die JRE benutzt eine virtuelle Maschine für Java (Java Virtual Machine
JVM) 107, die einen Bytecode-Interpretierer 108 und
eine Peer-Schnittstelle 109 umfaßt. Die JVM 107 interpretiert
den Bytecode unter Verwendung eines Bytecode-Interpretierers 108.
(Es ist zu beachten, daß in einigen
Architekturen (zum Beispiel in JavaStation) die Bytecodes direkt
ausgeführt
werden können, ohne
einen Interpretierer oder einen JIT zu benötigen).
-
Die
Programmierumgebung, die für
die Programmiersprache Java verwendbar ist, kann optional zusätzliche
Komponenten umfassen. Falls gewünscht,
kann zum Beispiel ein Just-in-time(JIT)-Kompilierer 110 zu
der Programmierumgebung hinzugefügt
werden. Der JIT ist ein Kompilierer, der Bytecode in Maschinencode
konvertiert, wenn ein Programm ausgeführt wird.
-
Bezug
nehmend auf die 1B enthält jeder Computer seine eigene
JVM 107. Die JVM 107 wirkt mit verschiedenen Arten
von nativen Betriebssystemen 114 bis 116 zusammen.
Jeder Computer 111 bis 113 kann verschiedene Betriebssysteme 114 bis 116 aufweisen.
Durch Verwendung der JVM 107 sind Computer 111 bis 113 in
der Lage, Bytecode in einer Weise auszuführen, die den Betriebssystemen 114 bis 116,
die jeder Computer enthält,
entspricht. Zum Beispiel können
beide Computer 111 und 112 das gleiche Programm
ausführen,
selbst wenn jeder Computer ein anderes Betriebssystem enthält. Der Computer 111 kann
ein Programm unter Verwendung des Betriebssystems UNIX 114 ausführen, und
der Computer 112 kann ein Programm unter Verwendung des
Java-Betriebssystems 115 ausführen.
-
Beschreibung
eines Applets
-
Das
Senden eines Applets über
ein Computernetz ist eine Möglichkeit,
um ein Computerprogramm zu verteilen. Ein Applet ist ein Computerprogramm,
das eingebettet in einer Web-Seite
auftreten kann oder von der Web-Seite getrennt sein kann. Applets
werden zu einem Client gesendet, wenn eine Web-Seite, die ein Applet
enthält,
von einem Client aufgerufen wird. Wenn zum Beispiel eine Person eine
Web-Seite betrachtet, die den folgenden Code enthält, wird
ein Applet mit dem Namen „animator" an den Browser zum
Anzeigen gesendet:
<HTML>
<APPLET CODE=‶animator.class‶ WIDTH=640 HEIGHT=480>
</HTML>.
-
Ein
in der Programmiersprache Java geschriebenes Applet, das mit Hilfe
des Web-Browsers oder eines anderen Programms, wie ein ViewerApplet,
abläuft,
wird als Java-Applet bezeichnet. Ein in Java geschriebenes Programm,
das ohne die Hilfe eines Web-Browsers ausgeführt wird, wird als Java-Anwendung
bezeichnet. Ein Java-Applet ist ein in der Programmiersprache Java
geschriebenes Programm, das als ein Teil einer Web-Seite verteilt
wird. In dem obi gen Beispiel wird eine Klassendatei mit dem Namen „animator.class" zu dem Client heruntergeladen
und mit Hilfe des Web-Browsers ausgeführt.
-
Obgleich
hier beschreiben wird, daß die
Applets über
HTTP zu den Web-Browsern übertragen werden,
ist die vorliegende Anmeldung nicht auf eine solche Übertragung
beschränkt.
Die Erfindung berücksichtigt Übertragungen
unter Verwendung eines beliebigen geeigneten Protokolls mit oder
ohne der Benutzung eines Web-Browsers. Die Übertragung kann über FTP, über eine
Modemverbindung, über eine
Netzverteilung, eine Client/Serververteilung, über eine Trägerwelle, durch eine Übertragung
auf portablen Medien oder mit jedem anderen Datenübertragungsverfahren
erfolgen.
-
Weiterhin
ist die vorliegenden Anmeldung nicht auf Applets und Anwendungen
beschränkt,
die auf der Programmiersprache Java beruhen, sondern besitzt die
gleiche Anwendbarkeit bei jeder Datei oder Programmiersprachenanwendung
oder dort, wo nicht ausführbarer
Code jeglicher Art verteilt wird.
-
Nicht komprimierte
Java-Programme
-
Wenn
ein Programm unter Verwendung der Programmiersprache Java erzeugt
wird, umfaßt
es üblicherweise
mehrere einzelne Dateien. Das Senden einer Kopie dieser Dateien
von einem Computer zu einem nächsten über ein
Computernetz ist eine Art, ein Programm zu verteilen. Bezug nehmend
auf 2 kann zum Beispiel ein einzelnes Java-Appelt 200 mehrere
verschiedene Klassendateien 201 bis 210, Bilddateien 211 bis 215,
Sounddateien 216 bis 220 und andere Arten von
Datendateien 221 bis 223 bei seiner Ausführung benötigen. Das
Java-Applet 200 befindet
sich auf einem Server 259 und wird über das Netz 250 gesendet,
wenn ein Abruf 253 von einem Browsers 252 auf
einem Clientcomputer 251 erfolgt. Der Clientcomputer 251 zeigt
einen Abruf 253 durch Ausgeben eines HTTP-Abrufs an den
Servercomputer 259 an, auf dem sich das Java-Applet 200 befindet.
In Antwort auf den Abruf 253 wird jede Datei, die das Java-Applet 200 umfaßt, über das
Netz 250 gesendet.
-
Diese
Dateien können über ein
Netz 250 in separaten HTTP-Abruf/Antwort-Paaren gesendet werden.
Die Klassendatei 201 wird zum Beispiel über das Netz 250 in
einem separaten Abruf/Antwort-Paar aus einer Klassendatei 203 gesendet.
In 2 wird jede Datei unter Verwendung eines separaten HTTP-Abruf/Antwort-Paars
gesendet. Die Linien, welche die Da teien 201–223 mit
dem Netz 250 verbinden, stellen eine Abfolge von HTTP-Abruf/Antwort-Paaren 260–282 dar.
Das Netz 250 verwendet jedes HTTP-Abruf/Antwort-Paar 260–282,
um mit einem Clientcomputer 251 Kontakt aufzunehmen und die
Dateien 201–223 zu
dem Clientcomputer 251 zu senden. Die Ausführung des
Java-Applets wird beginnen, wenn die erste Klassendatei empfangen
ist. Wenn zusätzliche
Dateien benötigt
werden, wird die Ausführung
ausgesetzt, bis die zusätzlichen
Dateien empfangen werden können,
und anschließend
wird die Ausführung
fortgesetzt. Die Dateien 201–223 werden nicht
komprimiert, bevor sie über
das Netz gesendet werden. Ein Problem beim Verteilen von Computerprogrammen
in dieser Weise besteht darin, daß große Zeitverzögerungen zwischen der Zeit,
zu der der erste Abruf für
das Java-Applet vorgenommen wird, und der Antwort existiert. (Ein
Abruf ist hier eine Nachricht von einem Client an den Server zum Anfragen
von so etwas wie einer Klassendatei oder einer JAR-Datei. Eine Antwort
ist die Nachricht des Servers zurück an den Client, um einen
Abruf auszuführen).
Im Ergebnis wird der Beginn des Programms verzögert. Dies führt zu einer
merklichen Verzögerung
für den
Benutzer, der eine Web-Seite, die ein Applet enthält, anzuzeigen
wünscht.
-
Techniken zum Packen und
Komprimieren/Dekomprimieren
-
Eine
Möglichkeit
zum Reduzieren der Zeit, die benötigt
wird, um ein Programm über
ein Netz zu senden, ist es, mehrere Dateien in eine Datei zu packen
oder jede Datei oder die gepackten Dateien zu komprimieren, bevor
sie über
das Netz gesendet werden. Es gibt verschieden Schemata zum Packen und/oder
Komprimieren von Dateien.
-
ZIP-Dateien
-
Eine
ZIP-Datei wird zum Packen und Verteilen von Dateien benutzt. ZIP-Dateien
enthalten eine oder mehrere einzelne Dateien. Um eine neue ZIP-Datei
zu erzeugen, entscheidet der Benutzer manuell, welche Dateien in
eine ZIP-Datei abgelegt werden. Sobald der Benutzer eine oder mehrere
Dateien ausgewählt
hat, wird die ZIP-Datei erzeugt, wenn ein Befehl zum Erzeugen ausgegeben
wird. Die Dateien, die ein Java-Programm (zum Beispiel ein Java-Applet) umfaßt, können zum
Beispiel zusammen gruppiert werden und in einer ZIP-Datei zum Verteilen
abgelegt werden.
-
Das
Ablegen einer Gruppe von Dateien zusammen in einer ZIP-Datei stellt
eine Möglichkeit
zur Verfügung,
um diese Gruppe über
das Netz schneller zu übertragen,
als die Dateien einzeln zu senden. Das heißt, ein einzelnes Abruf/Antwort-Paar
wird benutzt, um die gepackten Daten zu senden. Wenn ein Clientcomputer
zum Beispiel eine ZIP-Datei abfragt, wird die gesamte Datei über das
Netz in einem einzelnen HTTP-Abruf/Antwort-Paar übertragen. Der Nachteil der
ZIP-Dateien ist, daß der
Benutzer manuell auswählen
muß, welche
Dateien in eine ZIP-Datei abzulegen sind. Klassendateien können direkt
aus der ZIP-Datei geladen werden. Es wird jedoch darauf hingewiesen,
daß gepackte
Dateien komprimiert oder Dateien, die das Packet enthalten, individuell komprimiert
werden können,
wenn dies gewünscht ist.
-
Java-Archiv(JAR)-Dateien
-
Eine
Java-Archiv(JAR)-Datei ist eine Datei, die eine oder mehrere andere
Dateien enthält.
Eine JAR-Datei ermöglicht
dem Benutzer zum Beispiel, eine Sammlung von komprimierten Dateien
in eine einzelne Archivdatei abzulegen. Eine JAR-Datei enthält typischerweise
die Klassendateien und andere Datendateien, die einem Applet oder
einer Anwendung zugeordnet sind. Eine Möglichkeit, eine JAR-Datei zu
erzeugen, ist die Verwendung eines JAR-Packers. Der JAR-Packer ist
eine Java-Anwendung, die mehrere Dateien in einer einzelnen JAR-Datei
kombiniert. Der JAR-Packer kann zum Beispiel benutzt werden, um
eine einzelne Datei zu erzeugen, die alle komprimierten Dateien
enthält,
die zum Ausführen
eines Java-Applets oder eine Java-Anwendung benötigt werden. Das Grundformat zum
Erzeugen einer JAR-Datei unter Verwendung des JAR-Packers ist wie
folgt:
jar cf jar-file input-file(s).
-
Dieser
Befehl erzeugt eine komprimierte JAR-Datei. Der Befehl jar erzeugt
außerdem
eine Default-Manifest-Datei mit dem Namen MANIFEST.MF und legt diese
in einem Verzeichnis mit dem Namen META-INF ab. Die Manifest-Datei
ist eine Datei, die Informationen über die Dateien enthält, die
in der JAR-Datei gepackt sind. Die Option c gibt an, daß der Benutzer
eine JAR-Datei erzeugen möchte.
Die Option f gibt an, daß die
Ausgabe in eine Datei anstatt in einen Ausgabestrom gesendet wird.
Die Optionen c und f können
in einer beliebigen Abfolge auftreten, sollten jedoch nicht durch
ein Leerzeichen getrennt werden. Das Argument jar-file ist der Name
der JAR-Datei, die der Benutzer erzeugen möchte. Das Argument input-file(s) ist eine
mit Leerzeichen abgegrenzte Liste von einer oder mehreren Dateien,
die der Benutzer in die JAR-Datei ablegen möchte. Das Argument input-file(s)
kann ein Platzhaltersymbol (*) enthalten. Wenn irgendwelche der
input-file(s) Verzeichnisse sind, wird der Inhalt von diesen Verzeichnissen
zu der JAR-Datei rekursiv hinzugefügt.
-
Es
bestehen auch alternative Möglichkeiten, um
manuell eine JAR-Datei zu erzeugen. Jede Datei, die Informationen
unter Verwendung des JAR-Formats organisiert, wird als JAR-Datei
betrachtet. Das JAR-Format ist ein Satz von Konventionen zum Zuordnen
digitaler Signaturen und anderer Informationen zu den Dateien, die
in der JAR-Datei enthalten sind. Daher ist eine Möglichkeit
zum Herstellen einer JAR-Datei, eine Datei zu erzeugen, die diese
Konventionen nutzt. Beispielsweise ermöglichen die folgenden Schritte
einem Benutzer, eine JAR-Datei
zu erzeugen: 1) Manuelles Identifizieren der Dateien, die in die
JAR-Datei abgelegt werden sollen; 2) Erzeugen einer Manifest-Datei;
3) Wenn die Dateien in dem JAR-Archiv digital signiert werden sollen,
werden die geeigneten digitalen Signaturdateien in ein Unterverzeichnis
mit dem Namen META-INF abgelegt; 4) Kombinieren der META-INF-Dateien
mit den anderen Dateien und Erzeugen einer einzelnen ZIP-Datei.
-
Wenn
die Komponenten eines Applets oder einer Anwendung (Klassendateien,
Bilddateien, Sounddateien, Datendateien usw.) in einer einzelnen JAR-Datei
verbunden sind, ist es möglich,
eine Gruppe von Dateien unter Verwendung eines einzelnen HTTP-Abruf/Antwort-Paars
zu verteilen, anstelle dem Erfordernis eines neuen Abruf/Antwort-Paars
für jede
Datei. Das Verbinden von mehr als einer Datei in einer einzelne
Datei und das anschließende
Komprimieren dieser Dateien verbessert die Zeiten zum Herunterladen.
Ein Nachteil bei den JAR-Dateien
ist, daß der
Benutzer spezifizieren muß,
welche Dateien in das Archiv abgelegt werden sollen, bevor die JAR-Datei
erzeugt wird. Ein weiterer Nachteil ist, daß die gesamt JAR-Datei heruntergeladen
werden muß, bevor
die Ausführung
eines Programms begonnen werden kann.
-
3 zeigt
ein Beispiel eines Computerprogramms, das mehrere Dateien umfaßt. Ein
Java-Applet 200 umfaßt zum Beispiel
mehrere Klassendateien 201–210, Bilddateien 211–215,
Sounddateien 216–220 und
Datendateien 221–223.
Unter Verwendung eines JAR-Packers kann zum Beispiel eine Archivdatei 300 erzeugt
werden, die das Java-Applet 200 enthält. Die Archivdatei 300 kann
auch unter Verwendung anderer geeigneter Dateiformate erzeugt werden,
wie mit dem Dateiformat ZIP. Wenn der Browser 252 auf eine
Web-Seite trifft, die HTML-„Markup"-Symbole enthält, die
ein <APPLET>-Befehl einschließen, wird
ein HTTP- Aufruf 301 für ein Java-Applet 200 vorgenommen,
welches in einer Archivdatei 300 enthalten ist. Wenn zum
Beispiel das Java-Applet 200 in einer Archivdatei 300 mit
dem Namen jarFile.jar enthalten ist, führt der folgende HTML-Code
zu einem Abruf der Datei mit dem Namen jarFile.jar. Wenn ein Abruf
vorgenommen wird, wird die Datei jarFile.jar mit dem Applet 200 von
dem Server 259 zu dem Client 251 übertragen.
Das Archiv-Attribut kann ein oder mehrere JAR-Dateien auflisten,
die alle heruntergeladen werden, bevor das Applet mit der Ausführung beginnt.
<APPLET CODE=Applet.class
ARCHIVE=‶jarFile.jar‶ WIDTH=anInt HEIGHT=anInt>
<PARAM NAME=parameter1Name
VALUE=aValue>
<PARAM NAME=parameter2Name
VALUE=anotherValue>
</APPLET>
-
In
einer Antwort liefert der Server 259 die Datei jarFile.jar
zu dem Browsers 252 unter Verwendung einer einzelnen HTTP-Antwort 302.
Dadurch wird eine Möglichkeit
zur Verfügung
gestellt, alle Dateien, die das Java-Applet 200 umfaßt, von
dem Server 259 zu dem Browser 252, der sich auf
dem Client 251 befindet, zu übertragen. Ein Nachteil bei
diesem Ansatz ist, daß der
Browser 252 mit der Ausführung des Java-Applets 200 nicht
beginnen kann, bevor die gesamte Archivdatei 300 empfangen
ist. Ein anderer Nachteil bei JAR-Dateien ist, daß der Benutzer
manuell bestimmen muß,
welche Dateien in die JAR-Datei abgelegt werden sollen.
-
Wie
das vorhergehende Beispiel zeigt, ist ein Problem beim Verteilen
großer
Computerprogramme über
ein Netz, daß viel
Zeit benötigt
wird, um das Programm herunterzuladen und zu initialisieren. In
vielen Fällen
ist diese Zeitdauer für
den Benutzer nicht akzeptabel. In einem Versuch, die Zeitdauer zu
verkürzen,
die ein Benutzer warten muß,
bevor ein Programm lädt,
können
Archivdateien benutzt werden. Viele der Lösungen aus dem Stand der Technik
stellen keine Möglichkeit
zur Verfügung,
die Zeit zu minimieren, die für
ein Programm benötigt
wird, um einen gewünschten
Zustand zu erreichen. Das ZIP-Format verbessert dies durch den Versuch,
diese in eine einzelne Archivdatei abzulegen. Um jedoch Dateien
in ein ZIP-Archiv abzulegen, muß der
Benutzer manuell bestimmen, welche Dateien in die Archivdatei abgelegt
werden müssen.
Um das JAR-Format zu benutzen, muß der Benutzer außerdem manuell
bestimmen, welche Dateien in das Archiv abzulegen sind. Um eine
Archivdatei zu erzeugen, die in der Lage ist, ein Computerprogramm
zu einem bestimmten Ausführungspunkt
zu bringen, muß der
Benutzer manuell bestimmen, welche Dateien dies erreichen, und muß dann manuell
eine Archivdatei erzeugen, die diese Dateien enthält. Dieser
Vorgang ist mühsam
und stellt keine Möglichkeit
zur Verfügung,
die Ausführung
eines Computerprogramms automatisch zu optimieren. Alternativ ist
im Stand der Technik ein manuelles Bestimmen nur jener Dateien vorgesehen, die
zum Starten benötigt
werden und ein Ablegen dieser Dateien in eine gepackte Datei.
-
Das
Internetdokument von Bill Veneers „Understanding Digital Signatures:
Inside the Java virtual Machine by Bill Venners – β-Version" beschreibt das Konzept einer dynamischen
Verknüpfung
und einer dynamischen Ausführung
in Java. Insbesondere offenbart dieses Dokument, Klassendateien
so zu laden und dynamisch zu verknüpfen, wie diese von der Anwendung
benötigt
werden.
-
Das
Internetdokument „Oracle
Developer/2000: Deploying Applications on the Web" offenbart, mehrere
Klassendateien zu bündeln
und diese gebündelten
Klassendateien vor dem Starten des Programms herunterzuladen.
-
Kurzbeschreibung
der Erfindung
-
Mit
den Fortschritten in der Netztechnologie ist die Benutzung von Netzen
zur Unterstützung
der Verteilung von Computerprogrammen erheblich angewachsen, insbesondere
in dem Fall des Internets und des World Wide Web. Diese Computerprogramme
sind in der Größe erheblich
angewachsen. Das Problem beim Verteilen solcher Computerprogramme über das
Netz ist die lange Zeit, die erforderlich ist, um das Programm herunterzuladen
und zu initialisieren.
-
Die
vorliegende Erfindung wird in den beigefügten Ansprüchen festgelegt.
-
Ausführungsformen
der Erfindung umfassen ein Verfahren und eine Vorrichtung zur automatischen
Optimierung des Ladens eines Computerprogramms. Die Dateien, die
zum Ausführen
des Computerprogramms benötigt
werden, bis es einen gewünschten
Zustand erreicht, werden identifiziert und in eine optimierte Datei
abgelegt. Die optimierte Datei kann auf dem Computer ausgeführt werden,
auf dem sie sich befindet, oder sie kann von einem Computer zu einem
anderen übertragen
werden (zum Beispiel von einem Server- zu einem Clientcomputer).
Die optimierte Datei ermöglicht
einem Computer, ein Computerprogramm auszuführen, bis ein gewünschter, zuvor
bestimmter Zustand erreicht ist. Andere Dateien können vorgesehen
sein, die dem Computer die Möglichkeit
eröffnen,
das Computerprogramm über den
gewünschten Zustand
hinaus auszuführen.
Der gewünschte
Zustand des Computerprogramms kann zum Beispiel der Punkt sein,
an dem eine Benutzereingabe von dem Computerprogramm angenommen werden
kann.
-
In
einer Ausführungsform
der Erfindung ist die optimierte Datei eine Sammlung von Datendateien,
die in einer einzelnen Datei zusammengepackt sind. Eine Java-Archiv(JAR)-Datei
ist beispielsweise eine Art einer optimierten Datei. Die vorliegende
Erfindung kann auch andere Arten von Dateipackformaten benutzen,
wie das ZIP-Dateiformat. Jede Art von Datei, die ein oder mehrere
andere Dateien umfaßt,
ist geeignet, um eine optimierte Datei zu erzeugen. Die Computerprogrammarten,
auf die sich die vorliegende Erfindung bezieht, umfassen mehr als eine
Datei. Ein Computerprogramm, das beispielsweise als ein Java-Applet
implementiert ist, umfaßt Klassendateien,
Bilddateien, Sounddateien, Datendateien usw.. Von allen Dateien,
die das Computerprogramm ausmachen, wird nur ein Teil dieser Dateien
benötigt,
um tatsächlich
das Programm zu starten. In einer Ausführungsform der Erfindung werden
die Dateien, die zum Starten des Programms benötigt sind, automatisch ermittelt
und in eine optimierte Datei abgelegt.
-
Kurze Beschreibung
der Zeichnungen
-
1A stellt
ein Beispiel einer Programmierumgebung dar, die von der Programmiersprache Java
benutzt wird.
-
1B stellt
dar, daß jeder
Computer eine virtuelle Maschine zum Interagieren, um mit dem nativen
Betriebssystem des Computers umfaßt.
-
2 stellt
ein Verteilen eines Computerprogramms, welches mehrere Dateien enthält, über ein Computernetz
dar.
-
3 stellt
ein Verteilen eines Computerprogramms, das mehrere Dateien enthält, über ein
Computernetz unter Verwendung einer Archivdatei dar.
-
4 stellt
eine Ausführungsform
der Erfindung dar, die eine Optimierungseinrichtung verwendet, um
Informationen zu erzeugen und diese zu einem Optimierer zu leiten.
-
5 stellt
einen Ablauf dar, der in einer Ausführungsform der Erfindung benutzt
wird, um die Ausführung
eines Programms zu optimieren.
-
6A stellt
eine Ausführungsform
der Erfindung dar, bei der eine optimierte Datei und Restdateien
erlangt werden.
-
6B stellt
die Übertragung
einer optimierten Datei und einer Restdatei zu einem Clientcomputer über ein
Netz gemäß einer
Ausführungsform
der Erfindung dar.
-
7 stellt
eine Ausführungsform
der Erfindung dar, welche die in einer optimierte Datei abzulegenden
Dateien identifiziert.
-
8 stellt
eine Ausführungsform
der Erfindung dar, bei der sich der Optimierer und die Optimierungseinrichtung
auf dem gleichen Computer befinden.
-
9 stellt
ein Beispiel eines Ablaufs dar, der von dem Optimierer verwendet
wird, um eine optimierte Datei gemäß einer oder mehreren Ausführungsformen
der Erfindung zu erzeugen.
-
10 stellt
eine Ausführungsform
der Erfindung dar, die in Form eines computerlesbaren Programmcodes
implementiert ist.
-
Detaillierte
Beschreibung der Erfindung
-
Es
wird ein Verfahren und eine Vorrichtung zur automatischen Optimierung
der Ausführung
eines Computerprogramms beschrieben. In der folgenden Beschreibung
werden zahlreiche spezielle Details dargestellt, um eine vollständigere
Beschreibung der vorliegenden Erfindung zu liefern. Für den Fachmann
wird jedoch deutlich, daß die
vorliegende Erfindung ohne diese speziellen Details ausgeführt werden
kann. Andererseits werden gut bekannte Merkmale nicht im Detail
beschrieben, um nicht unnötigerweise
von der Erfindung abzulenken.
-
Eine
Ausführungsform
der Erfindung wird unter Verwendung der Techniken der objektorientierten
Programmierung implementiert. Um die aktuellen Ansätze zu verstehen,
um Computerprogramme über
ein Netz unter Verwendung von objektorientierten Programmiersprachen
zu verteilen, ist ein Überblick über das
objektorientierte Programmieren hilfreich.
-
Objektorientierte Programmierung
-
Objektorientiertes
Programmieren ist ein Verfahren zum Erzeugen eines Computerprogramms durch
die Kombination verschiedener fundamentaler Bausteine und durch
Erzeugen von Beziehungen unter und zwischen den Bausteinen. Die
Bausteine in objektorientierten Programmiersystemen werden als "Objekte" bezeichnet. Ein
Objekt ist eine Programmeinheit, die eine Datenstruktur (eine oder mehrere
Instanzvariablen) und die Operationen (Methoden), welche diese Daten
benutzen oder beeinflussen können,
zusammen gruppieren. Demnach besteht ein Objekt aus Daten und einer
oder mehreren Operationen oder Prozeduren, die an diesen Daten ausgeführt werden
können.
Das Kombinieren von Daten und Operationen in einen einheitlichen
Baustein wird als "Kapselung" ("encapsulation") bezeichnet.
-
Ein
Objekt kann angewiesen werden, eine seiner Methoden auszuführen, wenn
es eine "Nachricht" erhält. Eine
Nachricht ist eine Anweisung oder ein Befehl, die an das Objekt
gesendet wird, um eine bestimmte Methode auszuführen. Eine Nachricht besteht
aus einer Methodenauswahl (zum Beispiel Methodenname) und mehreren
Argumenten. Eine Nachricht teilt dem empfangenden Objekt mit, welche
Operationen auszuführen
sind.
-
Ein
Vorteil der objektorientierten Programmierung ist die Art, in der
die Methoden aufgerufen werden. Wenn eine Nachricht an ein Objekt
gesendet wird, ist es nicht notwendig, daß die Nachricht das Objekt
anweist, wie eine bestimmte Methode auszuführen ist. Es ist nur ein Aufruf
erforderlich, daß das Objekt
die Methode ausführt.
Dies vereinfacht die Programmentwicklung erheblich.
-
Objektorientierte
Programmiersprachen basieren in erster Linie auf einem "Klassen"-Schema. Ein klassenbezogenes
objektorientiertes Programmierschema ist allgemein beschrieben in:
Liebermann, "Using
Prototypical Objects to Implement Shared Behavior in Object-Oriented
Systems", OOPSLSA
86 Proceedings, September 1986, S. 214–223.
-
Eine
Klasse definiert eine Art eines Objekts, das typischerweise sowohl
Variablen als auch Methoden für
die Klasse umfaßt.
Eine Objektklasse wird benutzt, um eine bestimmte Instanz eines
Objekts zu erzeugen. Eine Instanz einer Objektklasse umfaßt die Variablen
und Methoden, die für
die Klasse definiert sind. Mehrere Instanzen der gleichen Klasse können aus
einer Objektklasse erzeugt werden. Jede Instanz, die aus einer Objektklasse
erzeugt wird, gilt als von der gleichen Art oder Klasse.
-
Zur
Illustration kann eine Arbeitnehmerobjektklasse die Instanzenvariablen "Name" und "Gehalt" und eine Methode "Gehaltsbestimmung" umfassen. Instanzen
der Arbeitnehmerobjektklasse können
für jeden
Arbeitnehmer in einer Organisation erzeugt oder instantiiert werden.
Jede Objektinstanz gilt als vom Typ "Arbeitnehmer". Jede Arbeitnehmerobjektinstanz umfaßt "Name"- und "Gehalt"-Instanzvariablen
und die "Gehaltsbestimmung"-Methode. Die Werte,
die der "Name"- und "Gehalt"-Variable jeder Arbeitnehmerobjektsinstanz
zugeordnet sind, enthalten den Namen und das Gehalt eines Arbeitnehmers
in der Organisation. Eine Nachricht kann an eine Arbeitnehmerobjektinstanz
eines Arbeitnehmers gesendet werden, um die "Gehaltsbestimmung"-Methode aufzurufen, um das Gehalt des
Arbeitnehmers zu verändern
(d. h. den Wert, welcher der "Gehalt"-Variable in dem
Arbeitnehmerobjekt des Arbeitnehmers zugeordnet ist).
-
Eine
Hierarchie von Klassen kann definiert werden, so daß eine Objektklassendefinition
eine oder mehrere Unterklassen besitzt. Eine Unterklasse übernimmt
die Definitionen ihrer Eltern (und ihrer Großeltern usw.). Jede Unterklasse
in der Hierarchie kann dem Verhalten, das durch seine Elternklasse spezifiziert
ist, etwas hinzufügen
oder dieses modifizieren. Einige objektorientierte Programmiersprachen
unterstützen
eine Mehrfachvererbung, wenn eine Unterklasse eine Klassendefinition
von mehr als einer Elternklasse erbt. Andere Programmiersprachen
unterstützen
nur eine Einfachvererbung, wenn eine Unterklasse darauf beschränkt ist,
die Klassendefinition nur einer Elternklasse zu erben. Die Programmiersprache
Java stellt außerdem
einen Mechanismus zur Verfügung,
der als eine „Schnittstelle" bekannt ist, die
als ein Satz von konstanten und abstrakten Methodendeklarierungen
umfaßt.
Eine Objektklasse kann die abstrakten Methoden, die in der Schnittstelle
definiert sind, implementieren. Sowohl die Einfach- als auch die
Mehrfachvererbung sind für über Schnittstellen
zugänglich.
Das heißt,
eine Schnittstelle kann eine Schnittstellendefinition von mehr als
einer Elternschnittstelle erben.
-
Ein
Objekt ist ein generischer Ausdruck, der in der objektorientierten
Programmierumgebung benutzt wird, um ein Modul zu bezeichnen, das
zugeordneten Code und Variablen enthält. Eine Softwareanwendung
kann unter Verwendung einer objektorientierten Programmierspra che
geschrieben werden, wobei die Funktionalität des Programms unter Verwendung
von Objekten implementiert wird.
-
Optimales
Ausführen
eines Computerprogramm
-
Ausführungsformen
der Erfindung können zum
automatischen Bestimmen der Dateien benutzt werden, die zum optimalen
Ausführen
eines Computerprogramms benötigt
werden, bis ein gewünschter Zustand
erreicht ist. In einer Ausführungsform
der Erfindung wird eine optimierte Datei erzeugt, welche die Dateien
enthält,
die für
das Computerprogramm notwendig sind, um den gewünschten Zustand zu erreichen.
Das Erzeugen einer optimierten Datei ist zum Beispiel nützlich,
wenn ein Computerprogramm über ein
Netz zu einem anderen Computer übertragen wird,
wo es anschließend
ausgeführt
wird.
-
In
einer Ausführungsform
der Erfindung werden die Dateien, die zum Ausführen des Computerprogramms
bis zu einem gewünschten
Zustand notwendig sind, über
ein Netz zu einem Clientcomputer in der optimierten Datei gesendet.
Der gewünschte Zustand
kann zum Beispiel der Punkt sein, an dem das Computerprogramm in
der Lage ist, eine Benutzereingabe aufzunehmen. Wenn die Dateien,
die in der optimierten Datei enthalten sind, empfangen sind, kann
der Clientcomputer das Programm bis zu dem gewünschten Zustand ausführen, ohne
zu warten, bis die restlichen Dateien, die während der Ausführung des
Programms verwendet werden, über
das Netz übertragen
sind. Da das Programm mit der Ausführung beginnen kann, bevor
alle Dateien, die das Computerprogramm umfaßt, empfangen sind, verringert
sich die Zeit, die zum Starten des Programms benötigt wird.
-
In
einer Ausführungsform
der Erfindung ist die optimierte Datei eine Sammlung von Datendateien,
die in einer einzelnen Datei zusammengepackt sind. Beispielsweise
kann eine Datei, die das Java-Archiv(JAR)-Format benutzt, verwendet
werden, um eine optimierte Datei zu erzeugen. Alternativ können auch
andere Arten von Dateipackformaten, wie das Dateiformat ZIP, benutzt
werden, um eine oder mehrere Ausführungsformen der Erfindung
zu implementieren. Für
die Fachleute auf dem Gebiet wird deutlich, daß jeder Dateityp oder jedes
Dateiformat, das das Implementieren von einer oder mehreren anderen
Dateien unterstützt,
geeignet ist, um eine optimierte Datei zu erzeugen. Computerprogramme
umfassen typischerweise mehr als eine Datei. Ein Computerprogramm,
das als ein Java-Applet implementiert ist, umfaßt zum Beispiel Klassendateien,
Bilddateien und andere Datendateien. Es wird jedoch nur ein Teil
der Dateien benötigt,
die ein Computerprogramm umfaßt,
um die Ausführung
des Programms zu beginnen.
-
In
einer Ausführungsform
der Erfindung werden die Dateien, die zum Starten des Programms
benötigt
werden, automatisch ermittelt und in eine optimierte Datei abgelegt.
Um eine optimierte Datei zu erzeugen, werden die Dateien identifiziert,
die ein Computerprogramm umfaßt.
Diese Dateien werden dann analysiert und jene, die benötigt werden,
um das Programm zu einem gewünschten
Zustand zu bringen, werden in der optimierten Datei abgelegt. In einer
Ausführungsform
der Erfindung wird dieser Vorgang durch eine Optimierungseinrichtung
ausgeführt,
die ermittelt, welchen Teil der Dateien das Programm zum Ausführen benötigt, und
durch ein Optimierer, der die optimierte Datei erzeugt. Die Optimierungseinrichtung
erzeugt eine Liste der Dateien, die es dem Computerprogramm ermöglichen,
die Ausführung
zu beginnen. Diese Liste der Dateien wird in einer Zwischendatei
gespeichert und zu dem Optimierer weitergeleitet.
-
Der
Optimierer benutzt die Liste, um eine optimierte Datei zu erzeugen.
Die optimierte Datei enthält
typischerweise den Teil der Dateien, die das Computerprogramm zum
Laden benötigt.
Die optimierte Datei kann zum Beispiel die Dateien enthalten, die
von dem Computerprogramm benötigt
werden, um einen Zustand zu erreichen, an dem eine Benutzereingabe
von dem Computerprogramm angenommen werden kann. Die optimierte
Datei kann jedoch auch Dateien enthalten, die von dem Computerprogramm
an einem beliebigen Zustand benötigt werden.
Ein gewünschter
Zustand kann zum Beispiel auftreten, bevor das Computerprogramm
auf eine große
Datendatei zugreift oder bevor das Programm in eine zeitaufwendige
Berechnung eintritt. Der Fachmann wird verstehen, daß die in
der optimierten Datei abgelegten Dateien oder andere Dateiarten
beliebige der Dateien sein können,
die von dem Computerprogramm bei der Ausführung benutzt werden. Weiterhin
kann der gewünschte
Zustand des Computerprogramms durch einen beliebigen Punkt während der Ausführung des
Computerprogramms festgelegt sein.
-
4 stellt
eine Ausführungsform
der Erfindung dar, die eine Optimierungseinrichtung 401 verwendet,
um zu ermitteln, wie ein Computerprogramm optimal auszuführen ist.
Die Optimierungseinrichtung 401 bewerkstelligt dies durch
Analyse des Programms, bis es einen gewünschten Zustand erreicht, durch
Erzeugen von Informationen über
diesen Zustand und durch Weiterleiten der Informationen zu einem
Optimierer 450. In dieser Ausführungsform der Erfindung kann
der gewünschte
Zustand durch die Optimierungseinrichtung 401, den Benutzer
oder durch den Softwareentwickler bestimmt werden. Zum Bestimmen
des optimalen Wegs zum Ausführen
des Computerprogramms trennt die Optimierungseinrichtung 401 die
Dateien, die das Programm bilden, in verschiedene Kategorien. Beispielsweise
werden die Teile der Dateien, die benutzt werden, um das Computerprogramm
zu laden, in eine Kategorie abgelegt und (falls die Optimierungseinrichtung
diese erkennt) werden die Dateien des verbleibenden Teils in eine andere
Kategorie abgelegt.
-
Die
Erfindung umfaßt
ein Betriebsverfahren, bei dem der Benutzer manuell auswählt, wann
der gewünschte
Zustand erreicht wurde. Alternativ kann eine API vorgesehen sein,
die der Programmierer aufruft, um der Einrichtung mitzuteilen, wann
der gewünschte
Zustand erreicht wurde.
-
Der
Optimierer 450 benutzt die Information über den gewünschten Zustand, um einen Satz
von optimierten Dateien zu bilden. In einer Ausführungsform der Erfindung erzeugt
der Optimierer 450 eine optimierte Datei 430,
welche die Dateien enthält,
die das Programm benötigt,
um den gewünschten
Zustand zu erreichen. Der Optimierer 450 kann außerdem eine
oder mehrere optimierte Restdateien 435 erzeugen. Die Restdateien 435 können Dateien
sein, die nicht notwendigerweise von dem Programm benötigt werden,
um den gewünschten
Zustand zu erreichen.
-
Die
Optimierungseinrichtung 401 entscheidet, welche Dateien
in die erste Kategorie abgelegt werden, durch Erzeugen einer Liste
der Dateien, die benötigt
werden, um einen gewünschten
Zustand des Computerprogramms zu erreichen. In einer Ausführungsform
der Erfindung erzeugt die Optimierungseinrichtung 401 diese
Liste unter Verwendung eines Optimierungscodes 402. Der
Optimierungscode 402 ist ein Programmcode, der dafür eingerichtet
ist, die Dateien, die von dem Programm ausgeführt werden, zu laden und zu
verfolgen. Der „Klassenlader" in der JRE kann
zum Beispiel modifiziert werden, um einen Optimierungscode 402 zu
erzeugen. Der Standardklassenlader kann dann durch den Optimierungscode 402 ersetzt
werden. Wenn das Programm unter Verwendung eines standardisierten „Klassenladers" geladen wird, werden
die Inhalte der Dateien, die geladen werden, um die Anwendung ablaufen
zu lassen, in einer Hash-Tabelle gespeichert. Der standardisierte „Klassenlader" prüft die Hash-Tabelle, bevor er
eine neue Datei lädt.
Wenn der Dateiname bereits in der Hash-Tabelle ent halten ist, werden
diese nicht geladen. Dadurch wird vermieden, daß doppelte Versionen der gleichen
Datei geladen werden.
-
In
einer Ausführungsform
der Erfindung wird eine öffentliche
Methode zu dem standardisierten Klassenlader hinzugefügt, um den
Optimierungscode 402 zu erzeugen. Wenn das Programm einen
gewünschten
Zustand erreicht hat (zum Beispiel wenn das Programm für eine Benutzereingabe
bereit ist), gibt der Optimierungscode 402 den Inhalt der Hash-Tabelle
in eine Datei aus. Dadurch wird eine Datei erzeugt, die eine Liste
der Dateien enthält,
die das Programm benötigt,
um den gewünschten
Zustand zu erreichen. Die Datei kann zum Beispiel die Liste der
Dateien enthalten, die das Programm benötigt, um einen Zustand zu erreichen,
an dem das Programm bereit ist, eine Benutzereingabe anzunehmen.
In einer Ausführungsform
der Erfindung werden die Inhalte der Hash-Tabelle in einer Zwischendatei 403 ausgegeben.
Dadurch kann die Zwischendatei 403 die Klassendateien,
Bilddateien, Sounddateien, Datendateien usw. enthalten, die benötigt werden, um
das Programm zu starten. Die Zwischendatei 403 kann eine
Liste der Dateien oder die Inhalte der Dateien enthalten.
-
Die
Optimierungseinrichtung 401 kann andere alternative Verfahren
benutzen, um eine Liste der Dateien zu erlangen, die von dem Programm
bis zu einem gewünschten
Zustand verwendet werden. Wenn die Zwischendatei 403 erzeugt
ist, kann sie zu dem Optimierer 450 zur Bearbeitung weitergeleitet werden.
Der Optimierer 450 benutzt dann die Zwischendatei 403,
um eine optimierte Datei 430 zu erzeugen.
-
In
einer Ausführungsform
der Erfindung befindet sich die Optimierungseinrichtung 401 innerhalb der
JVM des Clientcomputers 440. Um den Optimierungscode 402 zu
finden, untersucht der Clientcomputer 440 eine Umgebungsvariable 460.
In einer Ausführungsform
der Erfindung ist die Umgebungsvariable 460 eine CLASSPATH-Variable.
Die CLASSPATH-Variable
zeigt den Pfad zu dem Optimierungscode 402 an. Wenn zum
Beispiel der Optimierungscode 402 sich auf dem Client 440 auf C:/jdk1.1.6/lib/classes.zip
befindet, enthält
die CLASSPATH-Variable die Information, um den Clientcomputer 440 zu
ermöglichen,
den Optimierungscode 402 zu finden. (Alternativ kann die
-classpath command-live-Option benutzt werden). Wenn der Optimierungscode 402 gefunden
ist, wird das Programm unter Verwendung des Optimierungscodes 402 bearbeitet.
Der Optimierungscode 402 erzeugt dann eine Zwischendatei 403,
die zu dem Optimierer 450 zur Bearbeitung weitergeleitet
wird.
-
Das
Verfahren, das in einer Ausführungsform
der Erfindung benutzt wird, um die Ausführung eines Computerprogramms
zu optimieren, ist in 5 dargestellt. In diesem Verfahren
werden die Dateien, die benutzt werden, um einen gewünschten Zustand
des Computerprogramms zu erreichen, ausgewählt und in einer optimierten
Datei 430 abgelegt. Das Verfahren beginnt mit dem Schritt 500,
wenn der Benutzer einen Aufruf zur Optimierung eines Programms ausgibt.
Wenn dies stattfindet, wird im Schritt 501 verfolgt, welche
Dateien das Programm bei der Ausführung lädt. In einer Ausführungsform der
Erfindung wird das Programm durch eine Optimierungseinrichtung 401 betrieben,
die sich auf dem Client 440 befindet. Im Schritt 502 wird
eine Liste der Dateien, die das Programm lädt, in einer Zwischendatei
abgelegt. In einer Ausführungsform
der Erfindung legt die Optimierungseinrichtung 401 die
Dateien, die von dem Programm zum anfänglichen Laden benutzt werden,
in eine Zwischendatei 403 ab.
-
Im
Schritt 503 wird ermittelt, ob der Programmablauf einen
gewünschten
Zustand erreicht hat oder nicht. Diese Ermittlung kann von dem Benutzer vorgenommen
werden (oder in einer anderen Ausführungsform wird eine API aufgerufen,
um der Einrichtung zu sagen, wann der gewünschte Zustand erreicht wurde).
Ein Beispiel eines gewünschten
Zustands ist der Punkt, an dem das Computerprogramm bereit ist,
eine Benutzereingabe aufzunehmen. Typischerweise erreicht ein Programm
diesen Zustand nachdem ein Benutzer einen Befehl ausgegeben hat,
um das Programm zu öffnen,
und bevor der Benutzer das Programm mit einer beliebigen Eingabe
versieht. Wenn ermittelt ist, daß sich das Programm in dem
gewünschten
Zustand befindet, wird der Schritt 504 ausgeführt und
die Einträge,
die in der Zwischendatei zu finden sind, werden in einer optimierten
Datei abgelegt. Die Einträge,
die von der Optimierungseinrichtung 401 erzeugt werden
und in die Zwischendatei abgelegt werden, können auch direkt in die optimierte
Datei ohne die Verwendung der Zwischendatei abgelegt werden.
-
In
einer Ausführungsform
der Erfindung fuhrt ein Optimierer 450 den Schritt 504 aus.
Die Optimierungseinrichtung 401 und der Optimierer 450 können sich
auf separaten Computern befinden, die in der Lage sind, miteinander
zu kommunizieren. In einer anderen Ausführungsform der Erfindung befinden sich
die Optimierungseinrichtung 401 und der Optimierer 450 auf
dem gleichen Computer.
-
6A stellt
eine Ausführungsform
der Erfindung dar, bei der eine optimierte Datei und eine Restdatei
erlangt werden. Es wird eine Liste 601 der Dateien gezeigt,
die ein Computerpro gramm 600 umfaßt. Die Liste 601 enthält eine
Sounddatei 621, eine Datendatei 622, Klassendateien 602–616 und
Bilddateien 617–620.
Die Klassendateien 602, 603, 604, 605 und
die Bilddatei 617 werden benötigt, um den gewünschten
Programmzustand zu erreichen, und werden in die optimierte Datei 430 abgelegt.
Die Restdatei(en) 635 umfaßt die Dateien aus der Liste 601 ohne
diejenigen in der optimierten Datei 430.
-
In
einer Ausführungsform
der Erfindung wird mehr als eine Restdatei(en) 635 erzeugt.
Es können Kategorien
für verschiedene
Dateiarten erzeugt werden. Jede Restdatei 635 kann verschiedene
Komprimierungstechniken verwenden und verschiedene Dateiarten enthalten.
Sowohl die optimierte Datei 430 als auch die Restdatei 635 werden
auf dem Server 640 abgelegt, wo sie verbleiben, bis sie
von dem Client 650 abgerufen werden.
-
Die 6B stellt
die Übertragung
der optimierten Datei 430 zu einem Clientcomputer über ein Netz
gemäß einer
Ausführungsform
der Erfindung dar. In dieser Ausführungsform ist der Client 650 der Computer,
mit dem das Programm 600 ausgeführt wird. Um das Ausführungsprogramm 600 zu
starten, gibt der Client 650 einen Aufruf 651 aus.
Der Aufruf 651 wird zu dem Netz 660 geliefert
und zu dem Server 640 zur Bearbeitung gesendet. Das Netzt 660 ist ein
Netz, das dazu eingerichtet ist, um mehreren Computern zu ermöglichen,
miteinander zu kommunizieren. In einer Ausführungsform der Erfindung ist das
Netz 600 das Internet und benutzt das Transmission Control
Protocol/Internet Protocol (TCP/IP), um zu kommunizieren. Das Netz 660 kann
auch andere Protokolle verwenden, wie IPX oder Apple Talk.
-
In
einer Ausführungsform
der Erfindung liefert der Server 640 die optimierte Datei 430 zu
dem Client 650 über
das Netzt 660 unter Verwendung einer einzelnen HTTP-Antwort 661.
Die optimierte Datei 430 wird zu dem Client 650 vor
anderen Teilen des Programms 600 (zum Beispiel Restdatei(en) 635) gesendet.
Die Restdatei(en) 635 werden zum Beispiel zu dem Client 650 nach
der optimierten Datei 430 gesendet. In einer Ausführungsform
der Erfindung werden alle Dateien, die nicht in der optimierten Datei 430 enthalten
sind, in einer einzelnen Restdatei 635 abgelegt und über das
Netz 660 in einem einzelnen HTTP-Abruf/Antwort-Paar 671 gesendet.
In einer anderen Ausführungsform
werden mehrere Restdateien 635 über das Netz 660 zu
dem Client 650 unter Verwendung mehrerer HTTP-Abruf/Antwort-Paare
gesendet.
-
Die 7 zeigt
eine Ausführungsform
der vorliegenden Erfindung, um die in die optimierte Datei 730 abzulegenden
Dateien zu identifizieren. Wenn das Programm 700 sich anfänglich auf
dem Server 751 befindet, wird zum Beispiel eine optimierte
Datei 730 durch Weiterleiten des Programms 700 zu
dem Client 755 durch das Netz 760 erzeugt. Der
Client 755 analysiert das Programm 700 unter Verwendung einer
Optimierungseinrichtung 701. Die Optimierungseinrichtung 701 bestimmt,
welche Dateien von dem Programm 700 geladen werden, bis
ein gewünschter
Zustand erreicht ist (zum Beispiel wenn das Programm bereit ist,
eine Benutzereingabe anzunehmen). Wenn die Optimierungseinrichtung 701 ermittelt
hat, welche Dateien vor dem Erreichen des gewünschten Zustands ausgeführt werden,
erzeugt sie eine Zwischendatei 723. Die Zwischendatei 723 enthält zum Beispiel
eine Liste der Dateien, die benötigt
werden, um den gewünschten
Zustand des Programms 700 zu erreichen. Wenn das Programm 700 zum
Beispiel die folgende Liste enthält:
Klassendateien 702–716,
Bilddateien 717–720,
Sounddatei 721 und Datendatei 722; und wenn nur
die Klassendateien 702–705 und
die Bilddatei 720 benötigt
werden, um das Programm 700 zu dem gewünschten Zustand zu bringen,
enthält
die Zwischendatei 723 die Klassendateien 702–705 und
die Bilddatei 720.
-
In
einer Ausführungsform
der Erfindung enthält
die Zwischendatei 723 keine der anderen Dateien (zum Beispiel
die Klassendateien 706–716,
die Bilddateien 717–719,
die Sounddatei 721 und die Datendatei 722), die
von dem Programm 700 ausgeführt werden. Wenn die Zwischendatei 723 erzeugt
ist, wird diese zu einem Optimierer 750 weitergeleitet, der
sich auf dem Server 751 befindet. Der Optimierer 750 erzeugt
eine einzelne Datei, die alle Dateien aus der Zwischendatei 723 enthält. Die
Datei, die von dem Optimierer 750 erzeugt wird, wird als
optimierte Datei 730 bezeichnet. Die optimierte Datei 730 kann zum
Beispiel die Form einer Java-Archiv(JAR)-Datei oder einer ZIP-Datei
besitzen. Wenn die optimierte Datei 730 erzeugt ist, wird
eine optimierte Version des Programms 700, die als optimiertes
Programm 725 bezeichnet wird, auf dem Server 751 in
einem Datenspeicher 775 gespeichert. Das optimierte Programm 725 umfaßt eine
optimierte Datei 730 und eine oder mehrere zusätzliche
Dateien 770 (zum Beispiel Restdateien 635). Wenn
ein Clientcomputer einen Aufruf an den Server 751 für das optimierte
Programm 725 ausgibt, wird die optimierte Datei 730 zuerst über das
Netzwerk 760 gesendet. Zusätzliche Dateien 770 können nachfolgend
zu dem Clientcomputer während
oder nach der Ausführung
der optimierten Datei 730 gesendet werden.
-
In
einer Ausführungsform
der Erfindung befinden sich die Optimierungseinrichtung 701 und
der Optimierer 750 auf einem Clientcomputer 800,
wie in der 8 dargestellt. In dieser Aus führungsform
erzeugt die Optimierungseinrichtung 701 eine Zwischendatei 723 und
liefert diese zu dem Optimierer 750. Der Optimierer 750 erzeugt
anschließend
eine optimierte Datei 730.
-
In
einer Ausführungsform
der Erfindung nimmt der Optimierungscode 402 eine Liste
von Dateien (die zum Beispiel in einer Hash-Tabelle gespeichert
sind) auf, die von dem Computerprogramm geladen werden, wenn es
bis zu einem gewünschten Zustand
ausgeführt
wird. In einer alternativen Ausführungsform
der Erfindung nimmt die Optimierungseinrichtung 701 eine
Liste von Dateien, die in einer Zwischendatei 723 enthalten
sind, aus der Ausgabe „hprof" auf, die von der
Option -xhprof erzeugt wird. Eine andere mögliche Art ist die Verwendung
der Debugging API (JVMDI).
-
Die 9 stellt
ein Beispiel des Verfahrens dar, das von dem Optimierer 750 benutzt
wird, um eine optimierte Datei 730 zu erzeugen, gemäß einer oder
mehreren Ausführungsformen
der Erfindung. Beim Schritt 900 erwartet der Optimierer 750 als
Eingabe die Liste der Dateien, welche die optimierte Datei 730 umfaßt. In einer
Ausführungsform
der Erfindung erlangt der Optimierer 750 eine Zwischendatei 723 von
der Optimierungseinrichtung 701. Wenn die Zwischendatei 723 von
dem Optimierer 750 empfangen ist, führt der Optimierer 750 den
Schritt 901 aus und beginnt damit, jede Datei, die in der
Zwischendatei 723 aufgelistet ist, zu analysieren. Im Schritt 901.5 werden
Dateien analysiert, um zu ermitteln, ob die Klassendatei aufgrund
des Klassenpfads, von dem sie ist, einbezogen werden sollte. Beispielsweise sind
die Klassen JDK nicht notwendig in der optimierten Datei und können ausgeschlossen
werden. Im Schritt 902 ermittelt der Optimierer 750,
ob es gewünscht
ist, jede Datei, die in der Zwischendatei 723 aufgelistet
ist, zu komprimieren oder nicht.
-
Wenn
eine Komprimierung nicht gewünscht ist,
führt der
Optimierer 750 mit dem Schritt 904 fort und die
Datei bleibt unkomprimiert. Wenn eine Komprimierung gewünscht ist,
führt der
Optimierer 750 mit dem Schritt 903 fort und die
Datei wird komprimiert. Wenn zum Beispiel der Optimierer 750 auf
eine Bilddatei trifft, die das Format Joint Photographic Experts
Group (JPEG) verwendet, kann er bestimmen, die Bilddatei nicht weiterzukomprimieren.
Dadurch wird keine komprimierte JPEG-Datei größer als eine unkomprimierte
JPEG-Datei. Wenn der Optimierer 750 auf eine Textdatei
trifft, kann er entscheiden, daß eine
weitere Komprimierung vorteilhaft ist.
-
Im
Schritt 906 erlangt der Optimierer 750 eine Manifest-Datei.
In einer Ausführungsform
der Erfindung wird die Manifest-Datei in einem Verzeichnis mit dem
Namen META-INF abgelegt. Die Manifest-Datei kann auch andere arbiträre Informationen enthalten.
Im Schritt 907 bestimmt der Optimierer 750, ob
es erstrebenswert ist, die Dateien, die in der Zwischendatei 723 aufgelistet
sind, digital zu signieren. Wenn der Optimierer bestimmt, eine Datei
digital zu signieren, wird der Schritt 908 ausgeführt, und
Informationen über
die digitale Signatur werden in das Verzeichnis mit dem Namen META-INF
abgelegt.
-
In
einer Ausführungsform
der Erfindung wird auch der Schritt 909 ausgeführt, und
die Informationen über
die digitale Signatur werden in die Manifest-Datei abgelegt. Andernfalls
führt der
Optimierer 750 mit dem Schritt 910 fort, bei dem
alle Dateien, die in der Zwischendatei 723 aufgelistet
sind, in einer einzelnen Datei kombiniert werden, die sich optimierte
Datei 730 nennt. Wenn diese Schritte beendet sind, gibt
der Optimierer 750 die optimierte Datei 730 an
ein Speichermedium aus.
-
Ausführungsform
einer Computerausführungsumgebung
-
Eine
Ausführungsform
der Erfindung kann als Computersoftware in Form eines computerlesbaren
Programmcodes implementiert werden, der auf einem Computer für allgemeine
Zwecke ausgeführt wird,
wie einem Computer 1000, der in 10 dargestellt
ist. Eine Tastatur 1010 und eine Maus 1011 sind mit
einem bidirektionalen Systembus 1018 verbunden. Die Tastatur
und die Maus dienen zum Aufnehmen von Benutzereingabe in das Computersystem und übertragen
diese Benutzereingabe zu einem Prozessor 1013. Andere geeignete
Eingabeeinrichtungen können
zusätzlich
zu der Maus 1011 und der Tastatur 1010 oder statt
dessen benutzt werden. Eine I/O (Eingabe/Ausgabe)-Einheit 1019,
die mit dem bidirektionalen Systembus 1018 gekoppelt ist,
stellt solche I/O-Elemente dar, wie ein Drucker, AN (Audio/Video)-I/O,
usw..
-
Der
Computer 1000 umfaßt
ein Videospeicher 1011, einen Hauptspeicher 1015 und
einen Massenspeicher 1012, die alle mit dem bidirektionalen
Systembus 1018 zusammen mit der Tastatur 1010,
der Maus 1011 und dem Prozessor 1013 gekoppelt
sind. Der Massenspeicher 1012 kann sowohl feste als auch
entfernbare Medien umfassen, wie magnetische, optische oder magnetooptische
Speichersysteme oder eine beliebige andere verfügbare Massenspeichertechnologie.
Der Bus 1018 kann zum Beispiel 32 Adressleitungen zum Adressieren des
Videospeichers 1014 oder des Hauptspeichers 1015 aufweisen.
Der Systembus 1018 umfaßt außerdem beispielsweise einen
32-Bit-Datenbus zum Übertragen
von Daten zwischen und unter den Komponenten, wie dem Prozessor 1013,
dem Hauptspeicher 1015, dem Videospeicher 1014 und
dem Massenspeicher 1012. Alternativ können Multiplexdaten/Adressleitungen
anstelle von separaten Daten- und Adreßleitungen benutzt werden.
-
In
einer Ausführungsform
der Erfindung ist der Prozessor 1013 ein von Motorola hergestellter Mikroprozessor,
wie der 680X0-Prozessor, oder ein von Intel hergestellter Mikroprozessor,
wie der 80X86, oder Pentium-Prozessor, oder ein von Sun MicrosystemsTM hergestellter Mikroprozessor SPARCTM. Es können
jedoch auch beliebig andere Mikroprozessoren oder Mikrocomputer
benutzt werden. Der Hauptspeicher umfaßt ein Dynamic Random Access
Memory (DRAM). Der Videospeicher 1014 ist ein Dual-Port
Video Random Access Memory. Ein Anschluß des Videospeichers 1014 ist
mit einem Videoverstärker 1016 verbunden.
Der Videoverstärker 1016 wird
benutzt, um einen Rastermonitor 1017 mit Kathodenstrahlröhre (CRT)
anzutreiben. Der Videoverstärker 1016 ist
im Stand der Technik gut bekannt und kann durch beliebige geeignete
Vorrichtungen implementiert werden. Diese Schaltung konvertiert
Pixeldaten, die in dem Videospeicher 1014 gespeichert sind,
zu einem Rastersignal, das für
die Benutzung mit dem Monitor 1017 geeignet ist. Der Monitor 1017 ist
eine Monitorart, die zum Anzeigen von grafischen Bildern geeignet
ist.
-
Der
Computer 1000 kann auch eine Kommunikationsschnittstelle 1020 aufweisen,
die mit dem Bus 1018 verbunden ist. Die Kommunikationsschnittstelle 1020 stellt
eine Zweiwege-Datenkommunikation
zur Verfügung,
die über
eine Netzverknüpfung 1001 mit
einem lokalen Netzt 1022 verknüpft ist. Wenn zum Beispiel
die Kommunikationsschnittstelle 1020 eine Integrated Service
Digital Network (ISDN)-Karte oder ein Modem ist, sorgt die Kommunikationsschnittstelle 1020 für eine Datenkommunikationsverbindung
zu einem entsprechenden Typ von Telefonleitung, die einen Teil der
Netzverknüpfung 1021 umfaßt. Wenn
die Kommunikationsschnittstelle 1020 eine Local Area Network
(LAN)-Karte ist, sorgt die Kommunikationsschnittstelle 1020 für eine Datenkommunikationsverbindung über eine
Netzverknüpfung 1021 zu
einem kompatiblen LAN. Kabellose Verknüpfungen sind auch möglich. In
allen solchen Implementierungen sendet und empfängt die Kommunikationsschnittstelle 1020 elektrische,
elektromagnetische oder optische Signale, welche digitale Datenströme tragen,
die verschiedene Arten von Informationen darstellen.
-
Die
Netzverknüpfung 1021 sorgt
typischerweise für
eine Datenkommunikation über
ein oder mehrere Netze zu anderen Dateneinrichtungen. Zum Beispiel
kann die Netzverknüpfung 1021 für eine Verbindung über ein
lokales Netz 1022 zu einem Hostcomputer 1023 oder
zu einer Dateneinrichtung zur Verfügung stellen, die von einem
Internet Service Provider (ISP) 1024 betrieben wird. Der
ISP 1024 stellt umgekehrt eine Datenkommunikationsdienst über das
World Wide Packet Datenkommunikationsnetz zur Verfügung, das
nun üblicherweise
als das "Internet" 1025 bezeichnet
wird. Sowohl das lokale Netz 122 als auch das Internet 1025 benutzen
beide elektrische, elektromagnetische oder optische Signale, die
digitale Datenströme übertragen.
Die Signale in den verschiedenen Netzen und die Signale auf der Netzverknüpfung 1021 und
in der Kommunikationsschnittstelle 1020, welche die digitalen
Daten von und zu dem Computer 1000 transportieren, sind
beispielhafte Formen von Trägerwellen,
die Informationen transportieren.
-
Der
Computer 1000 kann über
das (die) Netz(e), die Netzverknüpfung 1021 und
das Kommunikationsinterface 1020 Nachrichten senden und
Daten, einschließlich
von Programmcode, empfangen. In dem Beispiel des Internets kann
der Server 1026 einen abgerufenen Code für ein Anwendungsprogramm über das
Internet 1025, ISP 1024, das lokale Netz 1022 und
die Kommunikationsschnittstelle 1020 übertragen. Erfindungsgemäß ist eine
solche heruntergeladene Anwendung das Verfahren und die Vorrichtung
zur Optimierung einer Ausführung
eines Computerprogramms, wie hierin beschrieben.
-
Der
empfangene Code kann von dem Prozessor 1013, wenn er empfangen
ist, ausgeführt
werden und/oder in dem Massenspeicher 1012 oder anderen
nichtflüchtigen
Speichern zur späteren
Ausführung
gespeichert werden. Auf diese Weise kann der Computer 1000 Anwendungscode
mittels einer Trägerwelle
erhalten.
-
Der
Anwendungscode kann in einer beliebigen Form eines Computerprogrammprodukts
ausgeführt
werden. Ein Computerprogrammprodukt umfaßt ein Medium, das dafür eingerichtet
ist, einen computerlesbaren Code zu speichern oder zu transportieren,
oder in welchem ein computerlesbarer Code verkörpert werden kann. Einige Beispiele
von Computerprogrammprodukten sind CD-ROM-Disketten, ROM-Karten,
Floppy Discs, Magnetbänder,
Computerfestplatten, Server auf einem Netzwerk und Trägerwellen.
-
Das
Computersystem, das vorhergehend beschrieben wurden, dient nur als
Beispiel. Eine Ausführungsform
der Erfindung kann in einer beliebigen Art eines Computersystems
oder einer Programmier- oder Bearbeitungsumgebung, einschließlich, jedoch nicht
darauf beschränkt,
eingebettet in Systemen, implementiert werden.
-
Damit
wurde ein Verfahren und eine Vorrichtung für ein Verfahren und eine Vorrichtung
zur Optimierung der Ausführung
eines Computerprogramms im Zusammenhang mit einer oder mehreren
speziellen Ausführungsformen
angegeben. Die Erfindung ist durch die Ansprüche und ihrem vollen Äquivalenzumfang
definiert.