DE69813618T2 - Kombinieren von mehreren klassendateien in einer laufzeitabbildung - Google Patents

Kombinieren von mehreren klassendateien in einer laufzeitabbildung

Info

Publication number
DE69813618T2
DE69813618T2 DE69813618T DE69813618T DE69813618T2 DE 69813618 T2 DE69813618 T2 DE 69813618T2 DE 69813618 T DE69813618 T DE 69813618T DE 69813618 T DE69813618 T DE 69813618T DE 69813618 T2 DE69813618 T2 DE 69813618T2
Authority
DE
Germany
Prior art keywords
java
preloaded
preparsed
class
runtime image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69813618T
Other languages
English (en)
Other versions
DE69813618D1 (de
Inventor
E. Markley
M. Sauntry
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=25537278&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=DE69813618(T2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of DE69813618D1 publication Critical patent/DE69813618D1/de
Application granted granted Critical
Publication of DE69813618T2 publication Critical patent/DE69813618T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44573Execute-in-place [XIP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Management Or Editing Of Information On Record Carriers (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stereo-Broadcasting Methods (AREA)
  • Time-Division Multiplex Systems (AREA)

Description

    GEBIET DER ERFINDUNG
  • Die Erfindung betrifft allgemein Java-Klassendateien, und spezieller betrifft sie die Kombination derartiger Dateien zu einem Laufzeitbild.
  • HINTERGRUND DER ERFINDUNG
  • Java ist eine relativ neue objektorientierte Programmiersprache, die Gegenstand des Interesses vieler Programmierer wurde. Idealerweise ist Java dahingehend eine architekturneutrale und portierbare Sprache, dass dieselbe Version vorgegebenerweise ohne jede Modifizierung auf jeder Plattform laufen sollte - d. h., dass ein Computer, auf dem eine Version des Betriebssystems Microsoft Windows läuft, ein Computer, auf dem eine Version des Betriebssystems Apple MacOS läuft, ein Computer, auf dem eine Version des Betriebssystems UNIX läuft, usw. alle dazu in der Lage sein sollten, mit derselben Version eines Java-Programms zu arbeiten. Das heißt, dass vorgegebenerweise keine "implementierungsabhängigen" Gesichtspunkte der Java-Sprachspezifikation bestehen.
  • Tatsächlich können in der Realität in Java geschriebene Programme realistischerweise nicht auf jeder beliebigen Plattform ohne Modifizierung laufen, um Unterschiede zwischen verschiedenen Plattformen zuzulassen, was auf charakteristischen Einschränkungen und Besonderheiten jeder vorgegebenen Plattform beruht. Zum Beispiel ist Microsoft Windows CE ein kompaktes, effizientes und skalierbares Betriebssystem, das bei einer großen Anzahl eingebetteter Produkte verwendet werden kann, von Hand-PCs bis zu spezialisierten Industriesteuerungen und Geräten der Verbraucherelektronik. Viele Geräte, die Microsoft Windows CE nutzen, sind dazu vorgesehen, über einen relativ geringen Umfang an Direktzugriffsspeicher (RAM) zu verfügen, wie einem Megabyte, um zu gewährleisten, dass die Geräte billig, kompakt und energienutzungseffizient bleiben.
  • Ferner verfügen zur Nutzung von Microsoft Windows CE konzipierte Geräte typischerweise über weniger leistungsfähige Prozessoren als das, was sich typischerweise in Computern findet, die dazu vorgesehen sind, mit leistungsfähigeren Betriebssystemen wie Microsoft Windows NT zu laufen.
  • Die Art von Java steht jedoch nicht notwendigerweise mit dem Lauf von in Java geschriebenen Programmen in derartigen Umgebungen wie Microsoft Windows CE in Einklang. Java ist sowohl eine kombinierte als auch eine interpretierte Sprache. Java-Quellencode wird in einfache Binäranweisungen - die als Java-Bytecodes oder J-Codes bezeichnet werden - umgewandelt, stark ähnlich wie normaler Mikroprozessor-Maschinencode. Während jedoch Quellencode in C oder C++ an charakteristische Anweisungen für einen speziellen Prozessor angepasst ist, wird Java-Quellencode zu Befehlen in einem universellen Format kompiliert, das als virtuelle Java-Maschine bekannt ist.
  • Die virtuelle Java-Maschine ist demgemäß ein natives Programm, das innerhalb eines Betriebssystems läuft, um Java- Bytecode zu interpretieren und auszuführen. Die Grundeinheit von Java-Code ist die Klasse. Wie bei anderen objektorientierten Sprachen sind Klassen Anwendungskomponenten, die ausführbaren Code und Daten enthalten sollen. Kompilierte Java-Klassen werden in einem universellen Binärformat verteilt, das Java-Bytecode und andere Klasseninformation ent hält. Klassen können diskret aufrechterhalten werden und in Dateien oder Archiven in einem lokalen System oder einem Netzwerkserver gespeichert werden. Typischerweise werden Klassen zur Laufzeit dynamisch geladen und geparst (syntaktisch analysiert), wenn sie von einer Anwendung benötigt werden.
  • Anders gesagt, wurde Java so konzipiert, dass Softwareimplementierungen des Laufzeitsystems ihr Funktionsvermögen dadurch optimieren können, dass Bytecode im Vorbeigehen in nativen Maschinencode kompiliert wird. Es wird eine Klassendatei geladen und geparst, so dass sie zur Laufzeit auf "just in time"-Basis kompiliert wird. Demgemäß, existieren, wenn ein Java-Programm durch eine virtuelle Java-Maschine abgearbeitet wird, schließlich zwei Versionen benötigter Klassendateien: die Bytecodeversionen, die anfangs vor dem Lauf des Programms existieren, und die geladenen und geparsten Versionen, wenn das Programm das erste Mal auf der virtuellen Java-Maschine läuft.
  • Bei diesem Konzept der Java-Programmiersprache bestehen im Zusammenhang mit Plattformen wie der Plattform Microsoft Windows CE, die auf Effizienz und Kosten konzipiert sind und demgemäß nicht über so viel Speicher und langsamere Prozessoren als z. B. Desktopcomputer, auf denen Microsoft Windows NT läuft, verfügen, konzipiert sind. Zunächst verwendet ein typisches Java-Programm viele Klassendateien, so dass das Laden und Parsen dieser Klassendateien zur Laufzeit auf einem weniger leistungsfähigen Prozessor viel Zeit benötigt. Zum Beispiel wurde herausgefunden, dass das Betreiben eines einfachen "Hallo Welt"-Programms - z. B. eines Programms, das dafür sorgt, dass auf dem Schirm die Worte "Hallo Welt" angezeigt werden - für die Ausführung auf einem Handgerät mit einem Prozessor, der mit ungefähr 40 Megahertz läuft, wegen des anfänglichen Ladens und Parsens der Klassendateien zur Laufzeit mehr als neun Minuten benötigen kann.
  • Ein Gesichtspunkt dieses anfänglichen Ladens und Parsens ist häufig die Übersetzung der Bytecodes der Java-Klassendateien vom Big-Endian-Format in das Little-Endian-Format. Das heißt, dass Bytecodes in Java-Klassendateien im Big-Endian- Format vorliegen, so dass die Bytes vom geringstsignifikanten zum höchstsignifikanten (z. B. 0, 1, 2, 3) geordnet sind, wohingegen auf vielen Plattformen das Little-Endian- Format verwendet wird, bei dem Bytes vom höchstsignifikanten zum geringstsignifikanten (z. B. 3, 2, 1, 0) geordnet sind. Ein anderer Gesichtspunkt dieses anfänglichen Ladens und Parsens besteht darin, dass das Java-Klassendateiformat den Ort einer nativen Mitgliedsfunktion nicht spezifiziert, so dass die virtuelle Maschine bei einem Prozess zum Auffinden des gewünschten Verfahrens alle geladenen Dateien durchsuchen muss.
  • Ein zweiter deutlicher Nachteil steht mit der Tatsache in Zusammenhang, dass jede Java-Klassendatei eine Kopie aller Daten enthält, die in dieser Klasse laufen müssen - z. B. Information betreffend die Superklassen, mit denen die Klasse in Beziehung steht. Diese Daten werden häufig auch in andere Klassendateien vervielfältigt, was in unnötiger Weise Raum vergeudet. Dies ist besonders bei Geräten mit begrenzter RAM-Menge problematisch. Zum Beispiel wurde herausgefunden, dass bei Java 1.1 (genauer gesagt, beim Java Development Kit 1.1 oder bei JDK 1.1) ein einfaches "Hallo Welt"- Programm in einem bestimmten Handgerät zur Laufzeit einen Speicherabbildungsumfang von über 700 Kilobyte oder nahezu 70% des verfügbaren einen Megabyte an RAM auf weist. Ein derartiges Handgerät kann auch ungefähr 300 Kilobytes an RAM benötigen, um den Schirm aufrechtzuerhalten, was bedeutet, dass Programme mit größerer Kompliziertheit als ein einfaches "Hallo Welt"-Programm wahrscheinlich überhaupt nicht auf dem Gerät laufen.
  • Drittens besteht ein einschlägiges Problem darin, dass bei einem typischen Java-Laufzeitsystem die Java-Klassendateien in einem Speicher abgelegt sind. Dies kann ein RAM oder ein Festwertspeicher (ROM) sein. Wenn die virtuelle Java-Maschine diese Dateien zur Ausführung benötigt, werden sie in den RAM geladen und geparst, so dass die sich ergebenden Daten während der Ausführungs im RAM abgespeichert werden. Dies bedeutet, dass während des Laufs eines Java-Programms tatsächlich zwei Versionen der in der Maschine gespeicherten benötigten Klassendateien existieren - die ungeladenen und ungeparsten Java-Klassendateien im Speicher (entweder im RAM oder im ROM) und die geladenen und geparsten Java-Klassendateien im RAM. Für Geräte mit eingeschränktem Speicher stellt diese eine Belastung dar.
  • Im EPA-Patent EP-A-0810522 von sun Microsystems, Inc. ist das Konvertieren dynamisch ladbarer Java-Klassen in statisch ladbare Klassen angegeben, die als ausführbares Modul gespeichert werden. EP-A-0810522 erörtert auch eine Ladeeinrichtung für statische Klassen, die die Klassenstruktur so modifiziert, dass sie statisch geladen werden kann. Diese statischen Klassen werden zur Bootzeit in den Direktzugriffsspeicher geladen und dann zur Laufzeit auf herkömmliche Weise verarbeitet.
  • Daher besteht Bedarf an einer Lösung, die diese Nachteile und Mängel beim Laden und Parsen von Java-Klassendateien zur Laufzeit durch eine virtuelle Java-Maschine überwindet, so dass Java-Programme in realistischer Weise eher auf langsameren Plattformen mit eingeschränktem Speicher laufen können, wie Handgeräten, die mit Microsoft Windows CE arbeiten.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die oben genannten Mängel, Nachteile und Probleme sind durch die Erfindung berücksichtigt, wie sie in den beigefügten Ansprüchen dargelegt ist. Die Erfindung beschreibt das Kombinieren mehrerer Java-Klassendateien in einem Laufzeitbild. Das Laufzeitbild der Java-Klassendateien ist dergestalt, dass sich die Klassendateien für eine virtuelle Java-Maschine in einem vorab geladenen und vorab geparsten Zustand befinden. Wünschenswerterweise ist das Laufzeitbild eine im Festwertspeicher (ROM) abgespeicherte DLL-Datei, und sie enthält nicht-redundante Daten.
  • Das Laufzeitbild wird wünschenswerterweise durch eine gesonderte Hilfseinrichtung erzeugt, die vorab eine vorgegebene Sammlung an Java-Klassendateien lädt und vorab parst, so dass die virtuelle Java-Maschine die Dateien zur Laufzeit nicht laden und parsen muss, sondern sie sich statt dessen auf das Laufzeitbild selbst stützen kann. Wünschenswerterweise gehört dazu das Übersetzen der Bytecodes der Java- Klassendateien vom Big-Endian-Format in das Little-Endian- Format sowie das Erzeugen importierbarer Datensätze, so dass Funktionsdatenstrukturen nativer Elemente darauf zeigen, was eine schnellere Funktionsauflösung nativer Elemente erlaubt.
  • Daher sorgt die Erfindung für Vorteile, die sich im Stand der Technik nicht finden. Erstens bedeutet, da die Java- Klassendateien im Laufzeitbild vorab geladen und vorab geparst sind, die Tatsache, dass die virtuelle Java-Maschine dieselben zur Laufzeit nicht laden und parsen muss, dass das Ausführen von Java-Programmen viel schneller ausgeführt wird. Zum Beispiel wurde herausgefunden, dass der Ablauf eines einfachen "Hallo Welt"-Programms für die Ausführung auf einem Handgerät mit einem Prozessor, der mit ungefähr 40 Megahertz läuft, weniger als eine Sekunde benötigt, im Ver gleich zu mehr als neun Minuten auf demselben Gerät, wenn die virtuelle Maschine zuerst die erforderlichen Klassendateien laden und parsen muss.
  • Zweitens wird, da in wünschenswerter Weise redundante Daten beseitigt werden, wenn die geladenen und geparsten Klassendateien zu einer einzelnen DLL-Datei kombiniert werden, an knappem Raum im Speicher gespart. Zum Beispiel wurde herausgefunden, dass bei Java 1.1.3 (genauer gesagt, Java Development Kit 1.1.3 oder JDK 1.1.3) in einigen Fällen eine Größenverringerung der Laufzeit-Bilddatei von 30% im Vergleich zum bekannten Laden und Parsen von Klassendateien zur Laufzeit erzielt werden kann.
  • Drittens ist das Laufzeitbild die einzige Version von Java- Klassendateien, die innerhalb eines vorgegebenen Geräts benötigt wird. Ferner wird diese einzige Version wünschenswerterweise im ROM abgespeichert und nicht im Direktzugriffsspeicher (RAM). Demgemäß ist, wenn im Stand der Technik zwei Versionen der Klassendateien existieren, die erste ein ungeladener und ungeparster Zustand, und die zweite ist ein zur Laufzeit geladener und geparster Zustand, wobei häufig diese zwei Versionen der Klassendateien beide im RAM vorhanden sind, während im Vergleich hierzu bei der Erfindung nur eine Version der Klassendateien vorliegt (nur die geladene und geparste Version), die wünschenswerterweise im ROM vorhanden ist. Dies spart an knappem Raum.
  • Durch die Erfindung werden Geräte, Computer, computerlesbare Medien und Systeme variablen Umfangs beschrieben. Zusätzlich zu den hier beschriebenen Gesichtspunkten und Vorteilen der Erfindung werden weitere Gesichtspunkte und Vorteile derselben unter Bezugnahme auf die Zeichnungen und durch Lesen der folgenden detaillierten Beschreibung ersichtlich.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Fig. 1 ist ein Diagramm der Hardware und der Betriebsumgebung, in deren Zusammenhang Ausführungsformen der Erfindung realisiert werden können;
  • Fig. 2(a) und 2(b) sind Diagramme zum Veranschaulichen eines Systems gemäß einer Ausführungsform der Erfindung im Vergleich zu einem bekannten System; und
  • Fig. 3(a) und 3(b) sind Flussdiagramme von Verfahren gemäß einer Ausführungsform der Erfindung.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • Der folgenden detaillierten Beschreibung beispielhafter Ausführungsformen der Erfindung ist auf die beigefügten Zeichnungen Bezug genommen, die einen Teil derselben bilden und in der zur Veranschaulichung spezielle beispielhafte Ausführungsformen dargestellt sind, gemäß denen die Erfindung realisiert werden kann. Diese Ausführungsformen sind in ausreichendem Detail beschrieben, um den Fachmann in die Lage zu versetzen, die Erfindung auszuführen. Daher ist die folgende detaillierte Beschreibung nicht in beschränkendem Sinn zu verstehen, und der Schutzumfang der Erfindung ist alleine durch die beigefügten Ansprüche definiert.
  • Die detaillierte Beschreibung ist in vier Abschnitte unterteilt. Im ersten Abschnitt werden die Hardware und die Betriebsumgebung beschrieben, in deren Zusammenhang Ausführungsformen der Erfindung realisiert werden können. Im zweiten Abschnitt wird eine Beschreibung einer Ausführungsform der Erfindung auf Systemebene im Vergleich zu einem bekannten System angegeben. Im dritten Abschnitt werden Verfahren für eine Ausführungsform der Erfindung angegeben. Im vierten Abschnitt wird eine Schlussfolgerung der detaillierten Beschreibung gegeben.
  • Hardware und Betriebsumgebung
  • In der Fig. 1 ist ein Diagramm der Hardware und der Betriebsumgebung, in deren Zusammenhang Ausführungsformen der Erfindung realisiert werden können, dargestellt. Die Beschreibung der Fig. 1 soll für eine kurze, allgemeine Beschreibung geeigneter Computerhardware und einer geeigneten Rechenumgebung, in deren Zusammenhang die Erfindung realisiert werden kann, geben. Obwohl es nicht erforderlich ist, wird die Erfindung im allgemeinen Zusammenhang computerausführbarer Anweisungen, wie Programmmodulen, beschrieben, die durch einen Computer wie einen PC ausgeführt werden. Im Allgemeinen enthalten Programmmodule Routinen, Programme, Objekte, Komponenten, Datenstrukturen usw., die spezielle Aufgaben ausführen oder spezielle abstrakte Datentypen realisieren.
  • Darüber hinaus ist es dem Fachmann erkennbar, dass die Erfindung mit anderen Computersystemkonfigurationen realisiert werden kann, einschließlich Handgeräten, wie solchen, auf denen Microsoft Windows CE läuft, Mehrprozessorsystemen, auf Mikroprozessoren beruhender oder programmierbarer Verbraucherelektronik, Netzwerk-PCs, Minicomputern, Großcomputern, PCs, auf denen Microsoft Windows NT läuft, und dergleichen. Die Erfindung kann auch in verteilten Rechenumgebungen ausgeübt werden, in denen Aufgaben durch entfernte Verarbeitungsvorrichtungen ausgeführt werden, die über ein Kommunikationsnetzwerk verbunden sind. In einer verteilten Rechenumgebung können sich Programmmodule sowohl in lokalen als auch in entfernten Speichervorrichtungen befinden.
  • Die Hardware und die Betriebsumgebung der Fig. 1 zum Reali sieren der Erfindung verfügt über eine universelle Rechenvorrichtung in Form eines Computers 20 mit einer Verarbeitungseinheit 21, einem Systemspeicher 22 und einem Systembus 23, der funktionsmäßig verschiedene Systemkomponenten einschließlich des Systemspeichers mit der Verarbeitungseinheit 21 verbindet. Es kann nur eine Verarbeitungseinheit 21 vorhanden sein, oder mehrere, so dass der Prozessor des Computers 20 über eine einzelne Verarbeitungseinheit (CPU) oder mehrere verfügt, was allgemein als parallele Verarbeitungsumgebung bezeichnet wird. Der Computer 20 kann ein herkömmlicher Computer, ein verteilter Computer oder ein beliebiger anderer Computertyp sein; die Erfindung ist nicht in dieser Weise beschränkt.
  • Der Systembus 23 kann einer von mehreren Typen von Busstrukturen sein, einschließlich einem Speicherbus oder Speichercontroller, einem Peripheriebus und einem lokalen Bus unter Verwendung einer Anzahl von Busarchitekturen. Der Systemspeicher kann auch einfach als Speicher bezeichnet werden, und er verfügt über einen Festwertspeicher (ROM) 24 und einen Direktzugriffsspeicher (RAM) 25. Ein grundlegendes Eingangs/Ausgangs-System (BIOS) 26, das die Grundroutinen enthält, die dazu beitragen, Information zwischen Elementen innerhalb des Computers 20 zu übertragen, wie während des Hochfahrens, ist im ROM 24 gespeichert. Der Computer 20 verfügt ferner über ein Festplattenlaufwerk 27 zum Lesen von einer nicht dargestellten Festplatte und zum Schreiben auf diese, ein Magnet-Plattenlaufwerk 28 zum Lesen von einer herausnehmbaren magnetischen Platte 29 und zum Schreiben auf diese, und ein optisches Plattenlaufwerk 30 zum Lesen von einer herausnehmbaren optischen Platte 31 wie einer CD-ROM oder einem anderen optischen Träger, oder zum Schreiben darauf.
  • Das Festplattenlaufwerk 27, das Magnet-Plattenlaufwerk 28 und das optische Plattenlaufwerk 30 sind über eine Festplattenlaufwerk-Schnittstelle 32, eine Magnetplattenlaufwerk- Schnittstelle 33 bzw. eine Schnittstelle 34 für das optische Plattenlaufwerk mit dem Systembus 23 verbunden. Die Laufwerke und ihre zugehörigen computerlesbaren Träger sorgen für nichtflüchtige Speicherung computerlesbarer Anweisungen, Datenstrukturen, Programmmodule und anderer Daten für dem Computer 20. Vom Fachmann ist zu beachten, dass jeglicher Typ computer lesbar er Träger, die Daten speichern können, auf die ein Computer zugreifen kann, wie Magnetkassetten, Flashspeicherkarten, digitale Videoplatten, Bernoulli-Kassetten, Direktzugriffsspeicher (RAMs), Festwertspeicher (ROMs) und dergleichen in der beispielhaften Betriebsumgebung verwendet werden können.
  • Auf der Festplatte, der Magnetplatte 29, der optischen Platte 31, dem ROM 24 oder dem RAM 25 kann eine Anzahl von Programmmodulen gespeichert sein einschließlich eines Betriebssystems 35, eines oder mehrerer Anwendungsprogramme 36, andere Programmmodule 37 sowie Programmdaten 38. Ein Benutzer kann über Eingabevorrichtungen wie eine Tastatur 40 und eine Zeigevorrichtung 42 Befehle und Information in den PC 20 eingeben. Zu anderen Eingabevorrichtungen (nicht dargestellt) können ein Mikrofon, ein Joystick, ein Gamepad, eine Satellitenschüssel, ein Scanner oder dergleichen gehören. Diese und andere Eingabevorrichtungen werden häufig über eine Schnittstelle 46 eines seriellen Ports, der mit dem Systembus verbunden ist, mit der Verarbeitungseinheit 21 verbunden, jedoch können sie über andere Schnittstellen angeschlossen werden, wie einen Parallelport, einen Gameport oder einen universellen seriellen Bus (usw.). Mit dem Systembus 23 ist auch ein Monitor 47 oder ein anderer Typ einer Anzeigevorrichtung über eine Schnittstelle, wie einen Videoadapter 48, verbunden. Zusätzlich zum Monitor verfügen Computer typischerweise über andere Ausgabe-Peripherievorrich tungen (nicht dargestellt), wie Lautsprecher und Drucker.
  • Der Computer 20 kann in einer Netzwerkumgebung unter Verwendung logischer Verbindungen zu einem oder mehreren entfernten Computer, wie einem entfernten Computer 49, arbeiten. Diese logischen Verbindungen werden durch eine Kommunikationsvorrichtung erzielt, die mit dem Computer 20 oder einem Teil desselben verbunden ist; die Erfindung ist auf keinen speziellen Typ einer Kommunikationsvorrichtung beschränkt. Der entfernte Computer 49 kann ein anderer Computer, ein Server, ein Router, ein Netzwerk-PC, ein Client, eine Peervorrichtung oder ein anderer üblicher Netzwerkknoten sein, und typischerweise enthält er viele oder alle der Elemente, die oben in Zusammenhang mit dem Computer 20 beschrieben wurden, wobei jedoch in der Fig. 1 nur eine Speichervorrichtung 50 dargestellt ist. Zu den in der Fig. 1 dargestellten logischen Verbindungen gehören ein Nahbereichsnetz (LAN) 51 und ein Fernbereichsnetz (WAN) 52. Derartige Netzwerkumgebungen sind in Büronetzwerken, unternehmensweiten Computernetzwerken, Intranets und dem Internet, die alle Netzwerken sind, üblich.
  • Wenn der Computer 20 in einer LAN-Netzwerksumgebung verwendet wird, ist er über eine Netzschnittstelle oder einen Netzadapter 53, wobei es sich um einen Typ einer Kommunikationsvorrichtung handelt, mit dem lokalen Netzwerk 51 verbunden. Wenn der Computer 20 in einer WAN-Netzwerksumgebung verwendet wird, verfügt er typischerweise über ein Modem 54, einen Typ einer Kommunikationsvorrichtung, oder irgendeinen anderen Typ einer Kommunikationsvorrichtung zum Ausführen von Kommunikationsvorgänge über das Weitbereichsnetz 52, wie das Internet. Das Modem 54, das intern oder extern sein kann, ist über die Schnittstelle 46 des seriellen Ports mit dem Systembus 23 verbunden. In einer Netzwerkumgebung können Programmmodule, die in Bezug zum PC 20 oder Teilen desselben dargestellt sind, in der entfernten Speichervorrichtung gespeichert sein. Es ist zu beachten, dass die dargestellten Netzwerkverbindungen beispielhaft sind und dass andere Maßnahmen und Kommunikationsvorrichtungen zum Erstellen von Kommunikationsstrecken zwischen den Computern verwendet werden können.
  • Es wurden die Hardware und die Betriebsumgebungen beschrieben, in deren Zusammenhang Ausführungsformen der Erfindung realisierbar sind. Der Computer, in dessen Zusammenhang Ausführungsformen der Erfindung realisiert werden können, kann ein herkömmlicher Computer, ein verteilter Computer oder irgendein anderer Computertyp sein; die Erfindung ist nicht in dieser Weise beschränkt. Ein derartiger Computer enthält typischerweise eine oder mehrere Verarbeitungseinheiten als Prozessor sowie einen computerlesbaren Träger als Speicher. Der Computer kann auch über eine Kommunikationsvorrichtung wie einen Netzwerkadapter oder ein Modem verfügen, so dass er kommunizierend mit anderen Computern verbunden werden kann.
  • Beschreibung auf Systemebene
  • Unter Bezugnahme auf die Fig. 2(a)-2(b) erfolgt eine Beschreibung des Betriebs einer Ausführungsform der Erfindung aus Systemebene im Vergleich zum Betrieb eines bekannten Systems. Ein Diagramm eines Systems, bei dem eine virtuelle Java-Maschine Java-Klassendateien gemäß dem Stand der Technik in einen Direktzugriffsspeicher (RAM) lädt und parst, wie in der Technik bekannt, ist in der Fig. 2(a) dargestellt, während in der Fig. 2(b) ein Diagramm eines Systems dargestellt ist, bei dem Java-Klassendateien vorab in ein Laufzeitbild in einem Festwertspeicher (ROM) geparst und geladen werden, damit sich eine virtuelle Java-Maschine darauf stützen kann, wenn ein Java-Programm abgearbeitet wird, was gemäß eine Ausführungsform der Erfindung erfolgt.
  • Es wird als Erstes auf die Fig. 2(a) Bezug genommen, gemäß der, gemäß dem Stand der Technik, die virtuelle Java-Maschine 200 zur Laufzeit die Java-Klassendateien 202 in den RAM 204 lädt und parst. Die Java-Klassendateien 202 sind solche Klassendateien, zu denen solche gehören, die zur Ausführung eines vorgegebenen Java-Programms benötigt werden. Im Allgemeinen wurde, mit der Herausgabe von Java 1.1 und folgenden Versionen (d. h. Java Development Kit 1.1 oder JDK 1.1) bestimmt, dass mehr als mindestens ungefähr 160 bis 190 derartiger Java-Klassendateien zur Ausführung selbst einfacher Programme wie eines "Hallo Welt"-Programms benötigt werden. Die Java-Klassendateien 202 werden in einem Speicher wie einem RAM (verschieden vom RAM 204, in den die geparsten und geladenen Java-Klassendateien eingespeichert werden), einen Festwertspeicher (ROM) oder einen Speicher wie ein Festplattenlaufwerk eingespeichert.
  • Die Struktur von Java-Klassendateien wurde im Abschnitt zum Hintergrund allgemein beschrieben; die Konstruktion und das Format derartigen Klassendateien sind in der Technik bekannt. Insbesondere wird jede Java-Klassendatei typischerweise durch eine Klassensuffixspezifikation gekennzeichnet und durch Bytecode kompiliert. Jede Java-Klassendatei wird gesondert übertragen; alle bei einem Java-Applet oder einer Java-Applikation verwendeten Klassen befinden sich in ihrer eigenen gesonderten Klassendatei. Die Klassendatei ist eine Abfolge von acht Bytes. Werte von 16 und 32 Bits werden durch Lesen von zwei oder vier dieser Bytes und durch Verbinden derselben erzeugt. Jede Klassendatei enthält eine magische Konstante, Information zur Haupt- und Nebenversion, einen Konstantenpool, Information zur Klasse, Information zu jedem der Felder und Verfahren in der Klasse sowie Debugging-Information. Der Konstantenpool besteht darin, wie verschiedene konstante Information zur Klasse gespeichert wird, und es kann ein Unicodestring, ein Klassen- oder Interfacename, eine Bezugsnahme auf ein Feld oder ein Verfahren, ein Zahlenwert oder ein konstanter Stringwert sein.
  • Die virtuelle Java-Maschine 200 ist ein natives Programm, das innerhalb eines Betriebssystems, wie Microsoft Windows CE, läuft, um ein Java-Programm zu interpretieren und auszuführen, das zuvor in Java-Bytecode kompiliert wurde. Eine virtuelle Java-Maschine wird auch als Java-Laufzeitinterpretierer bezeichnet. Bei der Laufzeitausführung eines Java- Programms lädt die virtuelle Java-Maschine 200 die Java- Klassendateien 202 und parst sie, und sie speichert die Java-Klassendateien im geladenen und geparsten Zustand in den RAM 204 ein. Wie es im Hintergrundabschnitt beschrieben wurde, existieren beim Stand der Technik auf diese Weise zwei Versionen der Java-Klassendateien, nämlich die ursprünglichen Java-Klassendateien, wie durch Java-Klassendateien 202 repräsentiert, und die im RAM 204 gespeicherte geparste und geladene Version. Das Laden und Parsen von Java-Klassendateien ist in der Technik bekannt. Information hinsichtlich Java ist in der Literaturstelle "JAva in a Nutshell: A Desktop Quick Reference", 2. Auflage, 1997 (ISBN 1-56592-262-X) von David Flanagan beschrieben.
  • Es wird als Nächstes auf die Fig. 2(b) Bezug genommen, gemäß der, entsprechend einer Ausführungsform der Erfindung, der Konverter 250 die Java-Klassendateien 252 in eine Datei 254 lädt und parst, die dann wünschenswerterweise durch eine ROM-Bildeinbrenneinrichtung 258 als Laufzeitbild (wünschenswerterweise als DLL-Datei) in den ROM 256 eingebrannt wird. Demgemäß muss die virtuelle Java-Maschine 206 keine der Java-Klassendateien 252 laden oder parsen, sondern sie kann vielmehr unmittelbar die als Laufzeitbild im ROM 256 abgespeicherte geparste und geladene Version der Klassendateien nutzen. Dies bedeutet, dass an RAM 262 eingespart wird, und es bedeutet auch, dass Java-Programme schneller ausgeführt werden, da zur Laufzeit weniger Overhead ausgeführt werden muss.
  • Der Konverter 250 und die ROM-Einbrenneinrichtung 258 sind im Allgemeinen Teil eines Computers, eines Computersystems oder eines vom Computer, vom Computersystem getrennten Geräts oder eines Geräts, auf dem die virtuelle Java-Maschine 260 läuft. Zum Beispiel können der Konverter 250 und die ROM-EInbrenneinrichtung 258 auf einer unter Microsoft Windows NT arbeitenden Workstation laufen, so dass der Konverter 250 die Java-Klassendateien 252 als Eingangsgröße verwendet (wie in einem Speicher wie einem Festplattenlaufwerk der Workstation abgespeichert), und er die sich ergebende Datei 254 ausgibt, die dann von der ROM-Bildeinbrenneinrichtung 258 zum Einbrennen in einem ROM 256 verwendet wird. Dieser ROM 256 kann dann auf eine Hardwarekarte zum Einsetzen in ein Gerät, wie ein unter Microsoft Windows CE betriebenes Handgerät, gesetzt werden, das die virtuelle Java-Maschine 260 und dem RAM 262 enthält.
  • Die Java-Klassendatei 252 sieht dieselben wie die Java-Klassendateien 202, die vorab geschrieben wurden; d. h., dass die Java-Klassendateien 252 diejenigen Klassendateien sind, die diejenigen enthalten, die zur Ausführung eines vorgegebenen Java-Programms erforderlich sind. Es ist zu beachten, dass alle erforderlichen Java-Klassendateien für ein vorgegebenes Java-Programm Teil der Java-Klassendateien 252 sein können; andere Java-Klassendateien können zur Laufzeit durch die virtuelle Java-Maschine 260 aus dem Speicher in den RAM 262 geladen und geparst werden, wie es für die Fig. 2(a) beschrieben wurde. Jedoch bilden wünschenswerterweise alle erforderlichen Klassendateien für ein vorgegebenes Java-Programm Teil der Java-Klassendateien 252, um optimale Ausfüh rungseffizienz zu erzielen.
  • Der Konverter 250 ist wünschenswerterweise ein Softwarewerkzeug (d. h. ein Computerprogramm), das für die Kombination von Klassendateien in eine einzelne DLL-Datei sorgt, wobei die DLL-Datei in portierbarem, ausführbarem (PE = portable executable) Format vorliegt, wie in der Technik bekannt. Das Werkzeug sorgt für die Spezifizierung der einzuschließenden individuellen Klassendateien (d. h. der Java-Klassendateien 252), und es sucht sich entlang einem spezifizierten Pfad durch alle abhängigen Klassendateien hindurch, wie es dem Fachmann bekannt ist. Wünschenswerterweise können auch DLL- Dateien in nativem Code zur Suche nach nativen Verfahren spezifiziert werden.
  • Der Konverter 250 lädt und parst Klassendateien auf dieselbe Weise wie eine virtuelle Java-Maschine, wie im Stand der Technik bekannt. Jedoch besteht wünschenswerterweise eine Ausnahme darin, dass der Konverter alle relevanten Datenstrukturen in speziellen Hiebs zuordnet, wobei alle Zeiger innerhalb dieser Datenstrukturen verfolgt werden, wie es dem Fachmann bekannt ist. Ferner platziert der Konverter wünschenswerterweise alle Strings in eine einzelne Stringtabelle, und native Mitgliedsfunktionen werden an die speziellen DLL-Dateien angepasst (d. h., dass DLL-Dateien zur Durchsuchung nach nativen Mitgliedfunktionen spezifiziert werden können; wenn eine an eine DLL-Datei angepasst ist, wird ein importierbarer Datensatz in der sich ergebenden DLL-Datei erzeugt, und die Datenstruktur der nativen Mitgliedsfunktion zeigt auf diesen Datensatz, wodurch eine spezielle und schnelle Auflösung nativer Mitgliedsfunktionen möglich ist). Bytecodes werden auch vom Big-Endian- auf das Little-Endian- Format umgestellt.
  • Das der Konverter zahlreiche Klassendateien in einer Sitzung vorab lädt und parst ist es wünschenswert, dazu in der Lage zu sein, nur eine Kopie von Daten einzuschließen, auf die sich mehr als eine Klassendatei stützt, so dass innerhalb der DLL-Datei 254 keine redundanten Daten vorhanden sind. Zum Beispiel können zwei Klassendateien auf dieselbe Superklasse Bezug nehmen, wie es in der Technik bekannt ist, so dass vollständige Information hinsichtlich dieser Superklasse in jeder Klassendatei vorhanden ist. Der Konverter enthält wünschenswerterweise nur eine Kopie dieser vollständigen Information, so dass jede Klasse auf dieselbe vollständige Information hinsichtlich der Superklasse Bezug nimmt. Dies ist ein Vorteil der Erfindung gegenüber dem Stand der Technik, wo das Laden einer Klassendatei zum Laden aller darin enthaltenen Information führt, unabhängig davon, ob sie betreffend andere Information von anderen Klassendateien redundant ist.
  • Die sich ergebende DLL-Datei 254, die im PE-Format vorliegt, verfügt über Datenabschnitte einschließlich der Hiebs von allen Klassendateien 252, sowie Bezugnahmen auf native Mitgliedsfunktionen, wie importierbare Datensätze, wie es beschrieben wurde. Alle Zeiger innerhalb dieser Abschnitte verfügen über eigene Ladezeit-Relokationsdatensätze, wie es dem Fachmann bekannt ist. Die Datei 254 wird wünschenswerterweise in den ROM 256 (oder einen anderen nichtflüchtigen Speicher) eingebrannt, um ein Laufzeitbild der Java-Klassendateien 252, wie vom Konverter 250 vorab geladen und geparst, zu erzeugen. Das Einbrennen in einem ROM erfolgt durch eine ROM-Bildeinbrenneinrichtung 258, die in der Technik bekannt ist. Zum Beispiel kann das Werkzeug ROM Image, bei dem es sich um ein OAK-Werzeug zu Windows CE handelt, verwendet werden. Wenn die DLL-Datei geladen wird, wird ein Zeiger auf das ROM-Bild erhalten, so dass keine zweite Kopie mehr geladen werden muss.
  • Die virtuelle Java-Maschine 260 ist wünschenswerterweise Software, die durch einen Prozess so von einem computer lesbaren Träger, wie einem Speicher, ausgeführt wird. Die virtuelle Java-Maschine, wie sie in der Technik bekannt ist, akzeptiert ein Kern-Befehlszeilenargument. Dieses Argument benennt die vertrauenswürdige (d. h. sichere) DLL-Datei der Kernklasse und verweist vorgabemäßig auf jcls.dll. Zur Laufzeit führt die virtuelle Java-Maschine einen Aufruf Load- Library und einen Aufruf GetProcAddress aus, um einen Zeiger auf die relevanten Datenstrukturen zu erhalten, und sie integriert diese mit existierenden Datenstrukturen in der virtuellen Java-Maschine. So ist die DLL-Datei der vertrauenswürdigen Kernklasse wünschenswerterweise das im ROM 256 abgespeicherte Laufzeitbild der Java-Klassendateien 252. Wenn neue Klassen von einem Java-Programm angefordert werden, wird die Klassenliste in der DLL-Datei der Kernklasse durchsucht, und wenn die neuen Klassen aufgefunden werden, wird die Klasseninitialisierung ausgeführt. Diese Klassen werden als initialisiert markiert und die Ausführung wird fortgesetzt. Dies umgeht die zeitaufwändige Prozedur des Ladens und Parsens der Klassendateien zur Laufzeit, wie dies beim Stand der Technik erfolgt. Es ist zu beachten, dass dann, wenn keine neue Klasse aufgefunden wird, im Dateisystem eine normale Suche nach der Klassendatei gestartet wird, und wenn sie aufgefunden wird, wird die Klasse wie beim Stand der Technik geladen und geparst.
  • In Zusammenhang mit dem Stand der Technik wurde ein Überblick über den Betrieb einer Ausführungsform der Erfindung auf Systemniveau beschrieben. Das vorab erfolgende Laden und Parsen von Java-Klassendateien durch ein Konverterprogramm bedeutet, dass das Laden und Parsen der Klassendateien nicht zur Laufzeit durch die virtuelle Java-Maschine erfolgen müssen, so dass Java-Programme effizienter laufen können. Ferner bedeutet das vorab erfolgende Laden und Parsen von Java- Klassendateien in ein in einer ROM-Einrichtung abgespeichertes Laufzeitbild, dass nur eine Version der Java-Klassendateien existiert - im Gegensatz zu zwei Versionen beim Stand der Technik (eine im Speicher und eine im RAM). Dies spart RAM in einem Gerät mit einer virtuellen Java-Maschine ein, was sehr gesucht sein kann.
  • Verfahren einer Ausführungsform der Erfindung
  • Im vorigen Abschnitt wurde eine Beschreibung des Betriebs einer Ausführungsform der Erfindung auf Systemebene gegeben. In diesem Abschnitt werden von einem Computer einer derartigen Ausführungsform, in der ein Konverter vorhanden ist, ausgeführte Verfahren unter Bezugnahme auf eine Reihe von Flussdiagrammen beschrieben. Die auszuführenden Verfahren bilden Computerprogramme aus computerausführbaren Anweisungen. Die Beschreibung von Verfahren unter Bezugnahme auf ein Flussdiagramm ermöglicht es dem Fachmann, Programme zu entwickeln, die Anweisungen zum Ausführen der Verfahren auf einem geeigneten Computer enthalten (dem Prozessor des Computers, der die Anweisungen von computerlesbaren Medien ausführt).
  • Es wird zunächst auf die Fig. 3(a) Bezug genommen, in der ein Flussdiagramm eines computergestützten Verfahrens gemäß einer Ausführungsform der Erfindung dargestellt ist. Dieses Verfahren enthält Schritte oder Aktionen, die von einem Gerät wie einem Computer ausgeführt werden müssen, um mindestens eine Java-Klassendatei vorab in ein Laufzeitbild zu laden und zu parsen, das in einem nichtflüchtigen Speicher wie einem ROM gespeichert wird. In einem Schritt 300 werden die Klassendateien vorab geladen und geparst, wie es in Zusammenhang mit der Fig. 2(b) beschrieben wurde, was auch in Verbindung mit der Fig. 3(b) beschrieben wird. In einem Schritt 302 wird von den vorab geladenen und geparsten Da teien ein Laufzeitbild erzeugt, wünschenswerterweise eine DLL-Datei in einem PE-Format, wie es in Zusammenhang mit der Fig. 2(b) beschrieben wurde. Schließlich wird, in einem Schritt 304, das Laufzeitbild - d. h., die DLL-Datei - in einen nichtflüchtigen Speicher wie einen ROM gebrannt, wie es ebenfalls in Zusammenhang mit der Fig. 2(b) beschrieben wurde. So umfasst das computergestützte Verfahren die folgenden drei Hauptschritte oder -aktionen: vorab erfolgendes Laden und Parsen der Klassendateien; Erzeugen einer Laufzeitbild- Datei; und Einbrennen der Laufzeitbild-Datei in einen nicht- flüchtigen Speicher.
  • Als Nächstes wird auf die Fig. 3(b) Bezug genommen, in der ein Flussdiagramm eines anderen computergestützen Verfahrens gemäß einer Ausführungsform der Erfindung dargestellt ist. Dieses Verfahren beinhaltet die Schritte oder Aktionen, die von einem Gerät wie einem Computer auszuführen sind, um eine Java-Klassendatei vorab zu laden und zu parsen. Das heißt, dass das Verfahren der Fig. 3(b) ein solches ist, durch das der Schritt 300 der Fig. 3(a) für jede der Java-Klassendateien ausgeführt wird. Der Fachmann erkennt, dass das Verfahren der Fig. 3(b) im Wesentlichen identisch mit der Lade- und Parsmethode ist, wie sie von einer in der Technik bekannten virtuellen Java-Maschine ausgeführt wird. Demgemäß ist die Beschreibung des Verfahrens der Fig. 3(b) mit ausreichenden Einzelheiten versehen, um den Fachmann in die Lage zu versetzen, die Erfindung auszuführen und zu nutzen.
  • In einem Schritt 350 wird die Klasse aus der Klassendatei geladen, und die Klasse wird in einem Schritt 352 geparst. Dies beinhaltet das Parsen des Konstantenpools, das Parsen der Methoden, das Parsen der Felder, das Parsen der Interfaces und der Parsen der Attribute der Klasse. Die Klassenreferenzen ausgehend vom Klassenpool werden zur Liste von Klassen für den Ladevorgang in einem Schritt 354 hinzuge fügt. Dann wird in einem Schritt 356 das Laden der Klassen fortgesetzt, bis die Klassenliste leer ist. Schließlich wird in einem Schritt 358 eine Relokationsinformation in die DLL- Datei eingeschrieben (was eine Korrektur irgendwelcher Fehler innerhalb des Konstantenpools beinhalten kann).
  • Wenn jede Klassendatei durch das Verfahren der Fig. 3(b) verarbeitet wird, werden Daten, die in einer Klassendatei angetroffen werden, die mit solchen redundant sind, wie sie in einer zuvor verarbeiteten Klassendatei abgespeichert wurden, nicht erneut abgespeichert. Vielmehr wird auf die bereits abgespeicherten Daten verwiesen, so dass das sich ergebende Laufzeitbild wünschenswerterweise nur nicht-redundante Daten enthält. Ferner besteht, da Java-Klassendateien typischerweise Daten im Bit-Endian-Format enthalten, wie bereits beschrieben, ein Gesichtspunkt des Vorablade- und Vorabparsprozesses der Fig. 3(b) in der Umwandlung der Daten im Big-Endian-Format in solche im Little-Endian-Format.
  • Es wurden Verfahren gemäß einer Ausführungsform der Erfindung beschrieben. Zu diesen Verfahren gehört das Verfahren, gemäß dem Klassendateien vorab geladen und geparst werden, ein Assembeln in ein Laufzeitbild erfolgt und sie in einen ROM eingespeichert werden. Zu den Verfahren gehört auch das Verfahren, gemäß dem die Schritte oder Aktionen genau abgegrenzt wurden, die bei einer Ausführungsform der Erfindung dazu erforderlich sind, eine Klassendatei tatsächlich vorab zu laden und zu parsen, was im Wesentlichen mit denjenigen Schritten identisch ist, wie sie von einer virtuellen Java- Maschine ausgeführt werden, wenn eine Klassendatei zur Laufzeit geladen wird.
  • Schlussfolgerung
  • Es wurde das Kombinieren mehrerer Java-Klassendateien in ein Laufzeitbild beschrieben. Obwohl hier spezielle Ausführungsformen veranschaulicht und beschrieben wurden, ist vom Fachmann zu beachten, dass jegliche Anordnung, die so berechnet ist, dass sie denselben Zweck erfüllt, die angegeben speziellen Ausführungsformen ersetzen kann. Diese Anwendung soll jegliche Anpassungen oder Variationen der Erfindung abdecken. Zum Beispiel kann auch während die Klassendatei während der Erzeugung der vorab zu ladenden DLL-Datei geparst werden, Java-Bytecode auch in native Code kompiliert werden, und es kann auch dieser native Code in der DLL-Datei gespeichert werden. Dies ist der auf einer typischen virtuellen Java-Maschine ausgeführten Just-in-time(JIT)-Interpretation vergleichbar, hätte jedoch statt dessen den Effekt des vorab Interpretierens des Codes, so dass später beim Ausführen der JIT-Interpretation zur Laufzeit keine Zeit vergeudet wird. So ist es ausdrücklich vorgesehen, dass die Erfindung nur durch die folgenden Ansprüche und deren Äquivalente beschränkt ist.

Claims (17)

1. Computergerät mit
einer Ausführungsvorrichtung (21, 260) zum Ausführen einer Java-Applikation mit Bezügen zu einer oder mehreren Java-Klassen,
dadurch gekennzeichnet, dass
das Gerät weiterhin umfasst:
eine Speichervorrichtung (304) zum Speichern eines Laufzeitbilds (256), das eine Bibliothek von vorab geladenen, vorab geparsten Java-Klassen aufweist, und
wobei die Ausführungsvorrichtung umfasst:
eine Vorrichtung, um der Java-Applikation mit Bezügen zu einer oder mehreren Java-Klassen direkten Zugang zu mindestens einer der Java-Klassen innerhalb des Laufzeitbilds zu geben.
2. Gerät nach Anspruch 1, wobei die Ausführungsvorrichtung (21, 260) umfasst:
einen Prozessor (21); und
eine virtuelle Java-Maschine (260), die durch den Prozessor (21) ausführbar ist, und so betreibbar ist, dass Java- Applikationen mit Bezügen zu einer oder mehreren Java-Klassen ausführbar sind.
3. Gerät nach Anspruch 2 mit weiterhin einer Vorrichtung zum Lesen eines computerlesbaren Mediums, wobei die virtuelle Java-Maschine (260) eine Software umfasst, die durch diese Vorrichtung gelesen wird.
4. Gerät nach einem der vorhergehenden Ansprüche, wobei die Speichervorrichtung (304) einen nichtflüchtigen Speicher umfasst.
5. Gerät nach Anspruch 4, wobei der nichtflüchtige Speicher einen Read-Only-Speicher (24) umfasst.
6. Gerät nach einem der vorhergehenden Ansprüche, wobei die Speichervorrichtung (304) derart betreibbar ist, dass vorab geladene und vorab geparste Java-Klassen in einem portierbaren ausführbaren Format speicherbar sind.
7. Gerät nach einem der vorhergehenden Ansprüche, wobei die Speichervorrichtung (304) derart betreibbar ist, dass ein nicht redundante Daten umfassendes Laufzeitbild (256) von mindestens einer Java-Klassen-Datei (252) speicherbar ist.
8. Gerät nach einem der vorhergehenden Ansprüche, wobei das Speichermedium (304) derart betreibbar ist, dass ein Laufzeitbild (256) in Form einer einzigen dynamisch verlinkten Bibliotheksdatei speicherbar ist.
9. Verfahren zum Ausführen einer Java-Applikation mit Bezügen zu einer oder mehreren Java-Klassen, folgende Schritte umfassend:
Speichern eines vorab geladenen und vorab geparsten Laufzeitbilds (256) mindestens einer Java-Klassen-Datei (252) mit einer Klasse, wobei das vorab geladene und vorab geparste Laufzeitbild (256) eine Bibliothek von vorab geladenen und vorab geparsten Java-Klassen umfasst; und
während der Laufzeit, Ausführen einer Java-Applikation mit Bezügen zu einer oder mehreren benötigten Java-Klassen, wobei die Java-Applikation auf mindestens eine der Java-Klassen innerhalb des vorab geladenen und vorab geparsten Laufzeitbilds (256) zugreift, ohne die Java-Klassen innerhalb des vorab geladenen und vorab geparsten Laufzeitbilds (256) zu laden oder zu parsen.
10. Verfahren nach Anspruch 9, wobei das vorab geladene und vorab geparste Laufzeitbild (256) vor der Laufzeit erzeugt wird, und wobei das Erzeugen des vorab geladenen und vorab geparsten Laufzeitbilds (256) für jede Java-Klasse (252) mit einer Klasse umfasst:
i) Laden (35) der Klasse;
ii) Analysieren (352) eines Konstanten-Pools, wobei der Pool mindestens eine Superklasse (3) umfasst;
iii) Laden (350) jeder Superklasse;
iv) Parsen (352) mindestens einer Methode aus der Klasse; und
v) Parsen (352) mindestens einer Eigenschaft aus der Klasse.
11. Verfahren nach Anspruch 10, wobei das Erzeugen des vorab geladenen und vorab geparsten Laufzeitbilds (256) weiterhin umfasst:
(vi) Korrigieren von Fehlern innerhalb des Konstantenpools.
12. Verfahren nach einem der Ansprüche 9 bis 11, wobei das vorab geladene und vorab geparste Laufzeitbild (256) mindestens einer Java-Klassen-Datei (252) nur nicht-redundante Daten umfasst.
13. Verfahren nach Anspruch 12, wobei das Erzeugen des vorab geladenen und vorab geparsten Laufzeitbilds (256) umfasst, dass ein vorab geladenes und vorab geparstes Laufzeitbild (256) mehrerer Java-Klassen-Dateien (252) erzeugt wird und wobei die mehreren Java-Klassen-Dateien Bezüge zu der gleichen Superklasse umfassen, und wobei in dem vorab geladenen und vorab geparsten Laufzeitbild (256) eine einzige Darstellung von Informationen für die Superklasse enthalten ist.
14. Verfahren nach einem der Ansprüche 9 bis 13, wobei die mindestens eine Java-Klassen-Datei (252) Daten im Big-Endian- Format umfasst, und wobei das vorab geladene und vorab geparste Laufzeitbild (256) Daten im Little-Endian-Format umfasst.
15. Verfahren nach einem der Ansprüche 9 bis 14, wobei der Schritt des Speicherns des vorab geladenen und vorab geparsten Laufzeitbilds (256) das Speichern eines vorab geladenen und vorab geparsten Laufzeitbilds als dynamisch verlinkte Bibliotheks-Datei umfasst.
16. Verfahren nach einem der Anspruche 9 bis 15, wobei der Schritt des Speicherns des vorab geladenen und vorab geparsten Laufzeitbilds (256) das Speichern des vorgeladenen und vorab geparsten Laufzeitbilds (256) in einem portierbaren, ausführbaren Format umfasst.
17. Computerlesbares Medium mit einem darauf gespeicherten Computerprogramm, das ausführbar ist, um einen programmierbaren Computer dazu zu veranlassen, ein Verfahren nach einem der Ansprüche 9 bis 16 auszuführen.
DE69813618T 1997-12-16 1998-12-16 Kombinieren von mehreren klassendateien in einer laufzeitabbildung Expired - Lifetime DE69813618T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/991,500 US6349344B1 (en) 1997-12-16 1997-12-16 Combining multiple java class files into a run-time image
PCT/US1998/026753 WO1999031576A1 (en) 1997-12-16 1998-12-16 Combining multiple class files into run-time image

Publications (2)

Publication Number Publication Date
DE69813618D1 DE69813618D1 (de) 2003-05-22
DE69813618T2 true DE69813618T2 (de) 2003-10-23

Family

ID=25537278

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69813618T Expired - Lifetime DE69813618T2 (de) 1997-12-16 1998-12-16 Kombinieren von mehreren klassendateien in einer laufzeitabbildung

Country Status (7)

Country Link
US (1) US6349344B1 (de)
EP (1) EP1040409B1 (de)
JP (1) JP4372348B2 (de)
AT (1) ATE237836T1 (de)
CA (1) CA2306118C (de)
DE (1) DE69813618T2 (de)
WO (1) WO1999031576A1 (de)

Families Citing this family (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6658492B1 (en) * 1998-03-20 2003-12-02 Sun Microsystems, Inc. System and method for reducing the footprint of preloaded classes
US6493870B1 (en) * 1998-03-20 2002-12-10 Sun Microsystems, Inc. Methods and apparatus for packaging a program for remote execution
JP2000122876A (ja) * 1998-10-16 2000-04-28 Matsushita Electric Ind Co Ltd 情報処理装置
US6848111B1 (en) * 1999-02-02 2005-01-25 Sun Microsystems, Inc. Zero overhead exception handling
US6880155B2 (en) * 1999-02-02 2005-04-12 Sun Microsystems, Inc. Token-based linking
US7200842B1 (en) 1999-02-02 2007-04-03 Sun Microsystems, Inc. Object-oriented instruction set for resource-constrained devices
CA2267477C (en) * 1999-03-30 2003-10-14 Object Technology International Inc. Packaging memory image files
US7017159B1 (en) * 1999-06-15 2006-03-21 Sun Microsystems, Inc. Smart bookmarks for small footprint device applications
US6584612B1 (en) * 1999-07-15 2003-06-24 International Business Machines Corporation Transparent loading of resources from read-only memory for an application program
GB9920676D0 (en) * 1999-09-01 1999-11-03 Tao Group Ltd Translating and executing object-oriented computer programs
US6829761B1 (en) * 1999-10-21 2004-12-07 Oracle International Corporation Method and apparatus for managing shared memory in a run-time environment
GB9925510D0 (en) * 1999-10-29 1999-12-29 Ibm Incorporating native code in java archive files
US7158993B1 (en) 1999-11-12 2007-01-02 Sun Microsystems, Inc. API representation enabling submerged hierarchy
KR100319755B1 (ko) * 1999-12-02 2002-01-05 오길록 내장형 자바가상머신을 위한 바이트코드 압축 방법
US20010042241A1 (en) * 2000-01-21 2001-11-15 Fujitsu Limited Apparatus and method for executing program using just-in time-compiler system
US7032216B1 (en) * 2000-02-25 2006-04-18 Oracle International Corporation Native compilation and safe deployment of virtual machine code
US6745386B1 (en) * 2000-03-09 2004-06-01 Sun Microsystems, Inc. System and method for preloading classes in a data processing device that does not have a virtual memory manager
JP2001256058A (ja) * 2000-03-13 2001-09-21 Omron Corp インタプリタ型言語によるプログラムの実行方法およびその方法を用いた情報処理装置
US6651186B1 (en) * 2000-04-28 2003-11-18 Sun Microsystems, Inc. Remote incremental program verification using API definitions
US6986132B1 (en) 2000-04-28 2006-01-10 Sun Microsytems, Inc. Remote incremental program binary compatibility verification using API definitions
US6883163B1 (en) 2000-04-28 2005-04-19 Sun Microsystems, Inc. Populating resource-constrained devices with content verified using API definitions
US6978448B1 (en) * 2000-06-12 2005-12-20 Sun Microsystems, Inc. Method and apparatus for rewriting bytecodes to minimize runtime checks
US6918106B1 (en) * 2000-07-31 2005-07-12 Sun Microsystems, Inc. Method and apparatus for collocating dynamically loaded program files
US6981245B1 (en) 2000-09-14 2005-12-27 Sun Microsystems, Inc. Populating binary compatible resource-constrained devices with content verified using API definitions
US6978456B1 (en) 2000-10-31 2005-12-20 Sun Microsystems, Inc. Methods and apparatus for numeric constant value inlining in virtual machines
US6996813B1 (en) 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
US6901591B1 (en) * 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US7506175B2 (en) * 2000-11-06 2009-03-17 International Business Machines Corporation File language verification
US20020170047A1 (en) 2001-02-23 2002-11-14 Brian Swetland System and method for transforming object code
WO2002069138A2 (en) * 2001-02-23 2002-09-06 Danger, Inc. System and method for transforming object code
US7080373B2 (en) * 2001-03-07 2006-07-18 Freescale Semiconductor, Inc. Method and device for creating and using pre-internalized program files
US7096466B2 (en) 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US7020874B2 (en) 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US6959430B2 (en) * 2001-05-09 2005-10-25 Sun Microsystems, Inc. Specialized heaps for creation of objects in object-oriented environments
US7389515B1 (en) 2001-05-21 2008-06-17 Microsoft Corporation Application deflation system and method
US7243346B1 (en) * 2001-05-21 2007-07-10 Microsoft Corporation Customized library management system
EP2244185B1 (de) * 2001-05-30 2014-01-01 BlackBerry Limited System zur Verarbeitung einer Anwendung für ein mobiles Kommunikationsgerät
US6986148B2 (en) * 2001-07-17 2006-01-10 Appforge, Inc. Methods and systems for providing platform-independent shared software components for mobile devices
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US7058934B2 (en) 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7228533B2 (en) 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
GB0125176D0 (en) * 2001-10-19 2001-12-12 Koninkl Philips Electronics Nv A method of compiling bytecode to native code
NL1019876C2 (nl) * 2002-01-31 2003-08-04 Chess Embedded Technology B V Systeem en werkwijze voor het laden van een programmacode in een inrichting alsmede een werkwijze voor het voeden van een programmacode aan een inrichting.
US6912633B2 (en) * 2002-03-18 2005-06-28 Sun Microsystems, Inc. Enhanced memory management for portable devices
US7010783B2 (en) * 2002-03-18 2006-03-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using reduced dynamic memory allocation
US7181737B2 (en) * 2002-03-18 2007-02-20 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using static procedure return addresses
US6996802B2 (en) * 2002-03-18 2006-02-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using initialization order and calling order constraints
AU2003241885A1 (en) * 2002-06-18 2003-12-31 Matsushita Electric Industrial Co., Ltd. Program execution terminal device, program execution method, and program
US6947955B2 (en) * 2002-09-23 2005-09-20 International Business Machines Corporation Run-time augmentation of object code to facilitate object data caching in an application server
US7051323B2 (en) * 2002-10-08 2006-05-23 Sun Microsystems, Inc. Method and apparatus for initializing romized system classes at virtual machine build time
US7055145B2 (en) * 2002-10-30 2006-05-30 Intel Corporation Dynamic management of execute in place applications
KR100493893B1 (ko) * 2003-02-07 2005-06-10 삼성전자주식회사 자바 프로그램에서 클래스 로딩 과정을 단축시키는 시스템및 방법
US7478408B2 (en) * 2003-04-04 2009-01-13 Sesma Systems, Inc. System and method for accessing objects in a platform dependent environment from a platform independent environment
US7490332B2 (en) * 2003-04-04 2009-02-10 Sesma Systems, Inc. System and method for accessing ActiveX objects in a platform dependent environment from objects in a platform independent environment
CN1777868A (zh) * 2003-04-24 2006-05-24 国际商业机器公司 可执行文件的创建
CA2638965A1 (en) * 2003-05-15 2004-11-15 Ibm Canada Limited - Ibm Canada Limitee Accessing a platform independent input method editor from an underlying operating system
KR100643268B1 (ko) * 2004-01-17 2006-11-10 삼성전자주식회사 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템
FR2871590B1 (fr) * 2004-06-15 2006-08-04 Gemplus Sa Procede de chargement d'un logiciel en langage intermediaire oriente objet dans un appareil portatif.
US7555746B2 (en) * 2004-12-09 2009-06-30 Sap Ag System and method for registering native libraries with non-native enterprise program code
US7600217B2 (en) * 2004-12-14 2009-10-06 Sap Ag Socket-like communication API for Java
US7580915B2 (en) * 2004-12-14 2009-08-25 Sap Ag Socket-like communication API for C
US7593930B2 (en) * 2004-12-14 2009-09-22 Sap Ag Fast channel architecture
US7552153B2 (en) 2004-12-28 2009-06-23 Sap Ag Virtual machine monitoring using shared memory
KR100749664B1 (ko) 2005-01-03 2007-08-14 에스케이 텔레콤주식회사 클래스 파일 롬 이미지화 방법 및 그 롬 이미지화된클래스 파일 실행 방법
US20060184937A1 (en) * 2005-02-11 2006-08-17 Timothy Abels System and method for centralized software management in virtual machines
US8250559B2 (en) * 2006-04-12 2012-08-21 Oracle America, Inc. Supporting per-program classpaths with class sharing in a multi-tasking virtual machine
US9183011B2 (en) * 2006-10-31 2015-11-10 Oracle America Inc. Method and system for runtime environment emulation
CN101339511B (zh) * 2007-07-02 2011-06-15 国际商业机器公司 用于监控和自适应地预载入关键动态连接库的方法和系统
JP2009099185A (ja) * 2007-10-16 2009-05-07 Dainippon Printing Co Ltd メモリをリフレッシュする機能を備えたストレージデバイス
US8732236B2 (en) * 2008-12-05 2014-05-20 Social Communications Company Managing network communications between network nodes and stream transport protocol
US8352509B2 (en) * 2007-12-19 2013-01-08 International Business Machines Corporation Methods, systems, and computer program products for accessing a multi-format data object
US8589788B2 (en) * 2007-12-19 2013-11-19 International Business Machines Corporation Methods, systems, and computer program products for automatic parsing of markup language documents
US8813041B2 (en) * 2008-02-14 2014-08-19 Yahoo! Inc. Efficient compression of applications
KR20130010911A (ko) * 2008-12-05 2013-01-29 소우셜 커뮤니케이션즈 컴퍼니 실시간 커널
KR101249739B1 (ko) * 2010-07-13 2013-04-03 주식회사 인프라웨어테크놀러지 달빅 가상머신이 탑재된 단말기에서 자바 클래스 로딩 방법, 그리고 이를 수행하는 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
WO2012118917A2 (en) 2011-03-03 2012-09-07 Social Communications Company Realtime communications and network browsing client
CN107193629A (zh) * 2017-04-07 2017-09-22 上海交通大学 基于非易失性内存与Java虚拟机的新型数据管理方法
US11809839B2 (en) 2022-01-18 2023-11-07 Robert Lyden Computer language and code for application development and electronic and optical communication

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5734910A (en) * 1995-12-22 1998-03-31 International Business Machines Corporation Integrating multi-modal synchronous interrupt handlers for computer system
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US5892904A (en) * 1996-12-06 1999-04-06 Microsoft Corporation Code certification for network transmission
US6112304A (en) * 1997-08-27 2000-08-29 Zipsoft, Inc. Distributed computing architecture
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files

Also Published As

Publication number Publication date
EP1040409B1 (de) 2003-04-16
CA2306118C (en) 2009-09-01
US6349344B1 (en) 2002-02-19
JP2002508560A (ja) 2002-03-19
ATE237836T1 (de) 2003-05-15
DE69813618D1 (de) 2003-05-22
EP1040409A1 (de) 2000-10-04
JP4372348B2 (ja) 2009-11-25
CA2306118A1 (en) 1999-06-24
WO1999031576A1 (en) 1999-06-24

Similar Documents

Publication Publication Date Title
DE69813618T2 (de) Kombinieren von mehreren klassendateien in einer laufzeitabbildung
DE69819188T2 (de) Programmschnittstellenumsetzer für rechner mit mehreren umgebungen
DE60010420T2 (de) Automatisches Regressionstesten von Arbeitsplatz-Software
DE69707752T2 (de) Verfahren und System zur Klassenspeicherung in einem Festspeicher
DE69813160T2 (de) Verfahren zur Objekt-Heap-Analyse zum Nachweis von Speicherverlusten und sonstigen Laufzeitinformationen
DE69636887T2 (de) System und Verfahren,um verschiedenen Anbietern von Namen zu ermöglichen,sich dynamisch einer Namensföderation anzuschliessen
DE69735343T2 (de) System, Verfahren und Vorrichtung zum direkten Ausführen eines architekturunabhängigen binären Programms
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE68921775T2 (de) Prozessorssimulation.
DE68921776T2 (de) Prozessorssimulation.
DE60001916T2 (de) Plattformunabhängige speicherabbild analysearchitektur zur programmfehlerbeseitigung
DE69510572T2 (de) Verfahren und Vorrichtung zur Run-Time-Fehlerprüfung unter Verwendung dynamischer Programmmodifikation
DE69938218T2 (de) Vorrichtung und Verfahren zum Laden eines Java Anwendungsprogramms
DE60103521T2 (de) Vorladen von klassen in einer datenverarbeitungseinrichtung ohne virtueller speicherverwalter
DE69516891T2 (de) Verfahren zum übersetzen von quellkode aus einer computer-hochsprache in eine andere
DE10121790B4 (de) Softwarekonfigurationsverfahren zur Verwendung in einem Computersystem
DE69404439T2 (de) Programmodellierungssystem.
DE69428848T2 (de) Mehrsprachige Standardressourcen
DE69503065T2 (de) Objektorientierte vorrichtung für konfigurationsverlaufsverwaltung
DE69426446T2 (de) Modellsystem zur informationskontrolle
DE60208710T2 (de) Plattformunabhängige im-voraus-kompilierung
DE3855475T2 (de) Software-Verwaltungsstruktur
DE69724322T2 (de) Verfahren und Anordnung zum frühzeitigen Einfügen von Assemblercode zwecks Optimierung
DE69232761T2 (de) Verfahren und vorrichtung zur aenderung von dynamische zuweisbaren objektcodedateien
DE69230578T2 (de) Sprachenneutrale Objekte

Legal Events

Date Code Title Description
8364 No opposition during term of opposition