DE69834087T2 - Verfahren und Gerät zur Vorverarbeitung und Verpackung von Klassendateien - Google Patents

Verfahren und Gerät zur Vorverarbeitung und Verpackung von Klassendateien Download PDF

Info

Publication number
DE69834087T2
DE69834087T2 DE69834087T DE69834087T DE69834087T2 DE 69834087 T2 DE69834087 T2 DE 69834087T2 DE 69834087 T DE69834087 T DE 69834087T DE 69834087 T DE69834087 T DE 69834087T DE 69834087 T2 DE69834087 T2 DE 69834087T2
Authority
DE
Germany
Prior art keywords
class
class files
computer
memory
files
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
DE69834087T
Other languages
English (en)
Other versions
DE69834087D1 (de
Inventor
Nedim San Francisco FRESKO
Richard San Francisco Tuck
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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=25505128&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=DE69834087(T2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Application granted granted Critical
Publication of DE69834087D1 publication Critical patent/DE69834087D1/de
Publication of DE69834087T2 publication Critical patent/DE69834087T2/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/44557Code layout in executable memory
    • G06F9/44563Sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99937Sorting

Description

  • HINTERGRUND DER ERFINDUNG
  • ERFINDUNGSGEBIET
  • Diese Erfindung betrifft das Gebiet der Computersoftware, und genauer, objektorientierte Computeranwendungen.
  • STAND DER TECHNIK
  • Infolge der Fortschritte in der Netzwerktechnologie hat der Einsatz von Netzwerken zur Erleichterung der Verteilung von Medieninformationen, wie beispielsweise Text, Graphik und Audio, drastisch zugenommen, insbesondere hinsichtlich Internet und World Wide Web. Ein Schwerpunktgebiet derzeitiger Forschungsbemühungen ist das Gebiet der Webanwendungen und der Netzwerkinteraktivität. Neben passiven Medieninhalten, wie HTML-Definitionen, sind an das Netzwerk gekoppelte Computernutzer oder „Clients" in der Lage, auf Anwendungsinhalte zuzugreifen oder sie herunterzuladen, in der Form von Applets, beispielsweise von „Servern" im Netzwerk.
  • Um der Vielfalt der von Clients genutzten Hardwaresystemen gerecht zu werden, werden die Anwendungen oder Applets in einem plattformunabhängigen Format, beispielsweise dem Java®-Class-Datei-Format, verteilt. Objektorientierte Anwendungen werden aus mehreren Class-Dateien gebildet, auf die von Servern zugegriffen wird und die einzeln nach Bedarf heruntergeladen werden. Class-Dateien enthalten Bytecode-Anweisungen. Ein „Virtual-Machine"-Prozess, der auf einer bestimmten Hardwareplattform ausgeführt wird, lädt die einzelnen Class-Dateien und führt die enthaltenen Bytecodes aus.
  • Ein mit dem Class-Datei-Format und dem Class-Lade-Prozeß verbundenes Problem ist, daß die Class-Dateien oft doppelte Daten enthalten. Die Speicherung, der Transfer und die Verarbeitung der einzelnen Class-Dateien ist somit aufgrund der Redundanz der Informationen ineffizient. Eine Anwendung kann außerdem viele Class-Dateien enthalten, die alle in separaten Transaktionen geladen und verarbeitet werden. Dies verlangsamt die Anwendung und verschlechtert die Leistung des Speicherzuweisers. Darüber hinaus muss ein Client für die Dauer der Anwendung eine physische Verbindung zu dem Server aufrechterhalten, um auf die abrufbaren Class-Dateien zuzugreifen.
  • Eine Übersicht allgemeinen objektorientierten Programmierens und ein Beispiel einer derzeitigen Netzwerkanwendungsumgebung verdeutlicht diese Schwierigkeiten.
  • Objektorientiertes Programmieren
  • Objektorientiertes Programmieren ist ein Verfahren zum Erstellen von Computerprogrammen durch Kombinieren bestimmter Basisbausteine und Erzeugen von Beziehungen zwischen den Bausteinen. In objektorientierten Programmierungssystemen werden die Bausteine „Objekte" genannt. Ein Objekt ist eine Programmiereinheit, die eine Datenstruktur (eine oder mehrere Instanzvariablen) und die Operationen (Methoden), die diese Daten verwenden oder beeinflussen können, zusammengruppiert. Ein Objekt besteht somit aus Daten und einer oder mehreren Operationen oder Abläufen, die an diesen Daten ausgeführt werden können. Die Verbindung von Daten und Operationen in einem einheitlichen Baustein wird „Verkapselung" genannt.
  • Ein Objekt kann angewiesen werden, eine seiner Methoden auszuführen, wenn es eine „Nachricht" erhält. Eine Nachricht ist ein Befehl oder eine Anweisung, der bzw. die an das Objekt gesendet wird, damit dieses eine bestimmte Methode ausführt. Eine Nachricht besteht aus einer Methodenauswahl (z.B. Methodenname) und mehreren Argumenten. Eine Nachricht sagt dem empfangenden Objekt, welche Operation es ausführen soll.
  • Ein Vorteil objektorientierten Programmierens ist die Weise, in der Methoden aufgerufen werden. Wird eine Nachricht an ein Objekt gesendet, so ist es nicht nötig, daß die Nachricht das Objekt darüber instruiert, wie eine bestimmte Methode ausgeführt werden soll. Es ist lediglich notwendig, anzufordern, daß das Objekt die Methode ausführt. Dies vereinfacht die Programmentwicklung erheblich.
  • Objektorientierte Programmiersprachen basieren vorwiegend auf einem „Class"-Schema. Das klassenbasierte objektorientierte Programmierungsschema wird allgemein in Liebermann, „Using Prototypical Objects to Implement Shared Behavior in Object-Oriented Systems", OOPSLA 86 Proceedings, September 1986, S. 214–223 beschrieben.
  • Eine Klasse definiert eine Objektart, die in der Regel sowohl Variablen als auch Methoden für die Klasse enthält. Eine Objektklasse wird zum Erzeugen einer bestimmten Objektinstanz verwendet. Eine Instanz einer Objektklasse enthält die für die Klasse definierten Variablen und Methoden. Aus einer Objektklasse können mehrere Instanzen derselben Klasse erzeugt werden. Jede aus der Objektklasse erzeugte Instanz gilt als derselben Art oder Klasse zugehörig.
  • Zur Verdeutlichung kann eine Angestellten-Objektklasse die Instanzvariablen „Name" und „Gehalt" und eine Methode „setze_Gehalt" enthalten. Für jeden Angestellten in einem Unternehmen können Instanzen der Angestellten-Objektklasse erzeugt oder initiiert werden. Jede Angstellten-Objektinstanz gilt als der Art „Angestellter" zugehörig. Jede Angestellten-Objektinstanz enthält die Instanzvariablen „Name" und „Gehalt" und die Methode „setze_Gehalt". Die Werte, die in jeder Angestellten-Objektinstanz den Variablen „Name" und „Gehalt" zugeordnet sind, enthalten den Namen und das Gehalt eines Angestellten in dem Unternehmen. An die Angestellten-Objektklasse eines Angestellten kann eine Nachricht gesendet werden, um die Methode „setze_Gehalt" aufzurufen, um das Gehalt des Angestellten zu modifizieren (d.h. der in dem Angstellten-Objekt eines Angestellten der Variablen „Gehalt" zugeordnete Wert).
  • Eine Klassenhierarchie kann so definiert werden, daß eine Objektklassendefinition eine oder mehrere Unterklassen hat. Eine Unterklasse erbt die Definition seiner Elternklasse (und Großelternklasse usw.). Jede Unterklasse kann das durch seine Elternklasse angegebene Verhalten ergänzen oder modifizieren. Von einigen objektorientierten Programmiersprachen wird eine Mehrfachbeerbung unterstützt, bei der eine Unterklasse eine Klassendefinition von mehr als einer Elternklasse erben kann. Andere Programmiersprachen unterstützen lediglich eine einfache Beerbung, bei der eine Unterklasse darauf beschränkt ist, die Klassendefinition von nur einer Elternklasse zu erben. Die Java-Programmiersprache stellt auch einen als „Schnittstelle" bekannten Mechanismus bereit, der eine Gruppe konstanter und abstrakter Methodenerklärungen enthält. Eine Objektklasse kann die in einer Schnittstelle definierten Methoden umsetzen. Für eine Schnittstelle sind sowohl Einfach- als auch Mehrfachbeerbung möglich. Das heißt, eine Schnittstelle kann eine Schnittstellendefinition von mehr als einer Elternschnittstelle erben.
  • Ein Objekt ist ein generischer Begriff, der in der objektorientierten Programmierungsumgebung mit Bezug auf ein Modul verwendet wird, das einen verwandten Code und Variablen enthält. Eine Softwareanwendung kann mittels einer objektorientierten Programmierungssprache geschrieben werden, wodurch die Funktionalität des Programms mit Hilfe von Objekten umgesetzt wird.
  • Ein Java-Programm besteht aus einer Reihe von Klassen und Schnittstellen. Anders als viele Programmiersprachen, in denen ein Programm in maschinenabhängige, ausführbare Programmcodes kompiliert wird, werden Javaklassen in maschinenunabhängige Bytecode-Class-Dateien kompiliert. Jede Klasse enthält den Code und die Daten in einem plattformunabhängigen Format, das Class-Datei-Format genannt wird. Das als Ausführungsvehikel verwendete Computerprogramm enthält ein Virtual-Machine genanntes Programm, das für die Ausführung des Codes in Javaklassen verantwortlich ist. Die Virtual-Machine stellt einen Abstraktionsgrad zwischen der Maschinenunabhängigkeit der Bytecode-Klassen und der maschinenabhängigen Anweisungsgruppe des zugrundeliegenden Hardware-Systems. Ein „Class-Loader" in der Virtual-Machine ist für das Laden der Bytecode-Class-Dateien nach Bedarf verantwortlich, und entweder führt ein Übersetzer die Bytecodes direkt aus oder ein „Just-in-time"(JIT)-Kompilierer wandelt die Bytecodes in Maschinencode um, so daß sie von dem Prozessor ausgeführt werden können. 1 ist ein Blockdiagramm, das eine beispielhafte Java-Netzwerk-Umgebung mit einer Client-Plattform 102 zeigt, die über ein Netzwerk 101 mit einem Server 100 gekoppelt ist, um zur Durchführung einer Java-Anwendung oder eines Java-Applets auf Java-Class-Dateien zuzugreifen.
  • Beispielhafte Java-Netzwerk-Anwendungs-Umgebung
  • Der Server 100 umfaßt in 1 eine Java-Entwicklungsumgebung 104 zur Verwendung bei der Erzeugung von Java-Class-Dateien für eine bestimmte Anwendung. Die Java-Entwicklungsumgebung 104 stellt einen Mechanismus, beispielsweise einen Editor oder einen Applet-Anzeiger bereit, um Class-Dateien zu erzeugen und eine Vorschau der Applets zu bieten. Eine Gruppe Java-Kern-Klassen 103 umfaßt eine Bibliothek von Javaklassen, auf die von Quelldateien verwiesen werden kann, die andere/neue Javaklassen enthalten. Von der Java-Entwicklungs-Umgebung 104 werden eine oder mehrere Java-Quelldateien 105 generiert. Die Java-Quelldateien 105 enthalten die für den Programmierer lesbaren Klassendefinitionen, einschließlich Datenstruktur, Methodenumsetzungen und Bezüge zu anderen Klassen. Die Java-Quelldateien 105 werden einem Java-Kompilierer 106 bereitgestellt, der Java-Quelldateien 105 in kompilierte „Class"-Dateien 107 kompiliert, welche Bytecodes enthalten, die von einer Java-Virtual-Machine ausführbar sind. Bytecodes-Class-Dateien 107 werden auf dem Server 100 gespeichert (d.h. in den Zwischenspeicher oder den permanenten Speicher) und stehen zum Herunterladen über das Netzwerk 101 zur Verfügung.
  • Die Client-Plattform 102 enthält eine Java-Virtual-Machine (JVM) 111, die aufgrund der Verwendung verfügbarer Signale 112 eines nativen Betriebssystems (O/S) zur Ausführung von Bytecode-Class-Dateien und nativer (O/S)-Signale in der Lage ist, falls dies während der Ausführung erforderlich ist.
  • Java-Class-Dateien werden in einem HTML-Dokument (Hypertext Markup Language) oft mittels Applet-Tags identifiziert. Eine Web-Server-Anwendung 108 wird auf dem Server 100 so ausgeführt, daß sie auf HTTP-(Hypertext Transport Protocol)-Anforderungen, die URLs (Universal Resource Locators) für HTML-Dokumente (auch „Webseiten" genannt) enthalten, reagiert. Wenn eine auf einer Client-Plattform 102 ausgeführte Browser-Anwendung ein HTML-Dokument anfordert, wie beispielsweise durch Weiterleiten von URL 109 an den Webserver 108, initiiert der Browser automatisch das Herunterladen der Class-Dateien 107, die in dem Applet-Tag des HTML-Dokuments identifiziert sind. Die Class-Dateien 107 werden in der Regel vom Server heruntergeladen und einzeln nach Bedarf in die Virtual-Machine 111 geladen.
  • Für die Klassen eines Java-Programms ist es üblich, daß sie nach Möglichkeit erst bei der Ausführung des Programms geladen werden; sie werden nach Bedarf von dem Netzwerk (auf einem Server gespeichert) oder von einem lokalen Dateisystem geladen, wenn auf sie erstmals während der Ausführung des Java-Programms Bezug genommen wird. Die Virtual-Machine lokalisiert und lädt jede Class-Datei, analysiert das Class-Datei-Format, weist den verschiedenen Komponenten der Klasse Speicherplatz zu und verbindet die Klasse mit anderen bereits geladenen Klassen. Dieser Prozeß führt dazu, daß der Code der Klasse durch die Virtual-Machine leicht ausgeführt werden kann.
  • Der individualisierte Class-Lade-Prozeß hat, so wie er üblicherweise ausgeführt wird, einige Nachteile hinsichtlich der Verwendung von Speicherressourcen auf Speichervorrichtungen, der Zuweisung von Speicherplatz und der Ausführungsgeschwindigkeit und -kontinuität. Diese Nachteile werden dadurch erschwert, daß eine typische Java-Anwendung Hunderte oder Tausende kleiner Class-Dateien enthalten kann. Jede Klasse ist eigenständig. Dies führt oft zu Informationsredundanzen zwischen Class-Dateien, beispielsweise, wenn zwei oder mehrere Class-Dateien gemeinsame Konstanten teilen. Daher brauchen viele Klassen große Speicherbereiche auf permanenten Speichervorrichtungen auf ineffiziente Art und Weise, um doppelt vorliegende Informationen einzeln zu speichern. Analog führt auch das einzelne Laden jeder Class-Datei zu unnötiger Verdopplung von Informationen in Anwendungsspeichern. Darüber hinaus wird der AuflösungsProzeß für die Konstanten unnötig wiederholt, weil gemeinsame Konstanten für jede Klasse während der Ausführung des Java-Codes getrennt aufgelöst werden.
  • Weil die Klassen jede für sich geladen wird, benötigt jede kleine Klasse eine eigene Gruppe von Zuweisungen von dynamischem Speicherplatz. Dies führt zur Fragmentation des Speichers und somit zur Verschwendung von Speicherplatz und verschlechtert die Leistung des Zuweisers. Für jede Klasse wird außerdem eine einzelne Lade-„Transaktion" benötigt. Die Virtual-Machine sucht nach einer Class-Datei entweder auf einer Netzwerkvorrichtung oder in einem lokalen Dateisystem und stellt eine Verbindung her, um die Klasse zu laden und zu analysieren. Dies ist ein verhältnismäßig langsamer Prozeß, der für jede Klasse wiederholt werden muss. Die Ausführung eines Java-Programms neigt bei der Reaktion/Ausführung zu unbestimmten Pausen, die durch jede Ladeprozedur einer Klasse verursacht werden, insbesondere, wenn die Klassen über ein Netzwerk geladen werden. Diese Pausen sind für Systeme, für die die interaktive oder Echtzeit-Ausführung wichtig ist, problematisch.
  • Ein weiterer Nachteil des Ladeprozesses einzelner Klassen ist, daß der Computer, der das Java-Programm ausführt, mit der Quelle der Java-Dateien für die Ausführungsdauer des Programms physisch verbunden bleiben muss. Dies ist insbesondere für mobile oder eingebettete Computer ohne lokale Speicherplatten oder eigenen Netzwerkzugriff problematisch. Wird die physische Verbindung während der Ausführung des Java-Programms unterbrochen, dann kann auf die Class-Dateien nicht zugegriffen werden und die Anwendung scheitert, sobald eine neue Klasse benötigt wird. Es passiert außerdem oft, daß die physische Verbindung zu Netzwerken wie dem Internet Kosten mit sich bringt, die mit der Dauer der Verbindung verknüpft sind. Zu der Unbequemlichkeit, eine Verbindung während der Ausführungsdauer einer Anwendung aufrechtzuerhalten, kommen für den Nutzer auch noch Kosten, die sich aus der physischen Verbindung ergeben.
  • Zur Gruppierung von Class-Dateien in ein einzelnes transportierbares Paket, das JAR-Datei genannt wird, wurde ein Java-Archiv-(JAR)-Format entwickelt. Eine JAR-Datei kann in einem HTML-Dokument in einem Applet-Tag identifiziert werden. Wenn eine Browser-Anwendung das HTML-Dokument liest und das Applet-Tag findet, wird die JAR-Datei auf den Client-Computer heruntergeladen und dekomprimiert. Eine Gruppe von Class-Dateien kann somit in einer einzigen Lade-Transaktion von einem Server zu einem Client heruntergeladen werden. Nach dem Herunterladen und Dekomprimieren sind die archivierten Class-Dateien auf dem Clientsystem für das individuelle Laden nach Bedarf gemäß Standard-Klassen-Lade-Verfahren verfügbar. Die archivierten Class-Dateien unterliegen weiterhin Speicherineffizienzen aufgrund von Datenverdopplung zwischen den Dateien sowie Speicherfragmentierung aufgrund der Durchführung einzelner Speicherplatzzuweisungen für jede Class-Datei.
  • Aus EP 0 702 291 A1 ist ein Verfahren und ein Mechanismus zum Aufrufen von Objekten mit Schnittstellenbeerbung bekannt. Ein Objektbezug verwendet zweiteilige m-Tabellen; insbesondere wird ein Zeiger auf Daten für ein Objekt und ein Zeiger auf Methoden auf dem Objekt beschrieben. Die Methoden auf dem Objekt werden durch eine Sammlung von m-Tabellen dargestellt. Eine m-Tabelle für eine bestimmte Schnittstelle besteht aus Zeigern auf m-Tabellen für geerbte Schnittstellen und Zeiger auf Funktionen, die die in der Schnittstelle erklärten Operationen umsetzen.
  • Aus dem Artikel „Object-oriented Programming in C The Linnaeus System" IBM Technical Disclosability, Bd.32, Nr.9B, S. 437–439 ist das Linnaeus-System bekannt, das objektorientiertes Programmieren in der C-Programmier-Sprache bereitstellt. Das Linnaeus-System ermöglicht objektorientiertes Programmieren in einer nicht-OOP-Sprache. Der Ansatz vereint die Vorteile von objektorientiertem Programmieren mit der Effizienz der Verwendung einer kompilierten Sprache. Wird ein Objekt instanziert, so trägt es einen Zeiger auf die entsprechende Klassentabelle. Objekte tragen keine ausdrücklichen Zeiger auf Methoden und es gibt nur eine Kopie jeder Klassentabelle.
  • KURZE DARSTELLUNG DER ERFINDUNG
  • Es wird ein Verfahren und eine Vorrichtung zum Vorverarbeiten und Paketieren von Class-Dateien beschrieben. Ausführungsformen der Erfindung entfernen doppelte Informationselemente aus einer Gruppe von Class-Dateien, um die Größe der einzelnen Class-Datei zu reduzieren und eine redundante Auflösung der Informationselemente zu verhindern. Speicherzuweisungserfordernisse werden im Voraus für die Gruppe der Klassen als Ganzes bestimmt, um die Komplexizität der Speicherzuweisung zu verringern, wenn die Gruppe von Klassen geladen wird. Für die effiziente Speicherung, den Transfer und Verarbeitung als eine Einheit werden die Class-Dateien in einem einzelnen Paket gespeichert.
  • In einer Ausführungsform der Erfindung untersucht ein Vor-Prozessor jede Class-Datei in einer Gruppe von Class-Dateien, um doppelte Informationen in Form von redundanten Konstanten in einem Konstanten-Pool zu lokalisieren. Die doppelte Konstante wird in eine getrennte gemeinsame Tabelle platziert und alle Vorkommnisse der Konstante werden aus der jeweiligen Konstanten-Pool der individuellen Class-Dateien entfernt. Während der Vorverarbeitung werden für jede Class-Datei Speicherzuweisungserfordernisse bestimmt und werden für die Bestimmung eines Gesamtspeicherzuweisungserfordernis für die Gruppe von Class-Dateien verwendet. Die gemeinsame Tabelle, das Speicherzuweisungserfordernis und die reduzierten Class-Dateien werden als eine Einheit in eine Multi-Class-Datei gepackt.
  • Wünscht eine Virtual-Machine das Laden der Klassen in der Multi-Class-Datei, so wird der Ort der Mehrfach-Class-Datei bestimmt und die Multi-Class-Datei wird bei Bedarf von einem Server heruntergeladen. Die Speicherzuweisungsinformation in der Multi-Class-Datei wird von der Virtual-Machine dazu verwendet, Speicher aus dem Heap der Virtual-Machine für der Gruppe von Klassen zuzuweisen. Die einzelnen Klassen werden mit entsprechenden reduzierten Konstanten-Pools zusammen mit den gemeinsam genutzten Tabellen in die Virtual-Machine geladen. An den reduzierten Konstanten-Pools und den gemeinsam genutzten Dateien wird nach Bedarf eine Konstanten-Auflösung durchgeführt.
  • KURZE BESCHREIBUNG DER FIGUREN
  • 1 ist eine Ausführungsform einer Java-Netzwerk-Anwendungs-Umgebung.
  • 2 ist ein Blockdiagram einer Ausführungsform eines Computersystems, das zum Bereitstellen einer geeigneten Ausführungsumgebung für eine Ausführungsform der Erfindung in der Lage ist.
  • 3 ist ein Blockdiagramm einer Ausführungsform eines Class-Datei-Formats.
  • 4 ist ein Flussdiagramm eines Class-Datei-Vorverarbeitungs-Verfahrens gemäß einer Ausführungsform der Erfindung.
  • 5 ist ein Blockdiagramm eines Mehrfach-Class-Datei-Formats gemäß einer Ausführungsform der Erfindung.
  • 6 ist ein Blockdiagramm von Runtime-Daten-Gebieten einer Virtual-Machine gemäß einer Ausführungform der Erfindung.
  • AUSFÜHRLICHE BESCHREIBUNG DER ERFINDUNG
  • Die Erfindung ist ein Verfahren und eine Vorrichtung zum Vorverarbeiten und Paketieren von Class-Dateien. In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, um eine gründlichere Beschreibung von Ausführungsformen der Erfindung bereitzustellen. Einem Fachmann dürfte jedoch klar sein, daß die Erfindung auch ohne diese spezifischen Einzelheiten ausgeführt werden kann. An anderen Stellen wurden wohlbekannte Merkmale nicht näher beschrieben, um die Erfindung nicht undeutlicher zu machen.
  • AUSFÜHRUNGSFORM DER COMPUTERAUSFÜHRUNGSUMGEBUNG (Hardware)
  • Eine Ausführungsform der Erfindung kann als Computer-Software in Form eines computerlesbaren Programmcodes umgesetzt werden, der auf einem Allzweck-Computer, wie dem in 2 gezeigten Computer 200 ausgeführt wird, oder in Form von Bytecode-Class-Dateien, die durch eine auf einem solchen Computer laufende Virtual-Machine ausführbar sind. Eine Tastatur 210 und eine Maus 211 sind an einen bidirektionalen Systembus 218 gekoppelt. Die Tastatur und die Maus dienen der Einführung von Benutzereingaben in das Computersystem und dem Übermitteln dieser Benutzereingaben an eine Zentrale Verarbeitungseinheit (CPU) 213. Andere geeignete Eingabevorrichtungen können zusätzlich zu oder anstelle von der Maus 211 und der Tastatur 210 verwendet werden. Eine E/A-(Eingabe/Ausgabe)-Einheit 219, die an einen bidirektionalen Systembus 218 gekoppelt ist, steht für solche E/A-Elemente, wie beispielsweise einen Drucker, A/V-(Audio/Video)-E/A usw.
  • Der Computer 200 enthält einen Videospeicher 214, einen Hauptspeicher 215 und einen Massenspeicher 212, die zusammen mit der Tastatur 210, der Maus 211 und der CPU 213 alle an einen bidirektionalen Systembus 218 gekoppelt sind. Der Massenspeicher 212 kann sowohl feste als auch entfernbare Medien, wie beispielsweise magnetische, optische oder magnetooptische Speichersysteme, oder beliebige andere erhältliche Massenspeichertechnologie enthalten. Der Bus 218 kann beispielsweise 32 Adresszeilen zum Adressieren des Videospeichers 214 oder des Hauptspeichers 215 enthalten. Der Systembus 218 enthält außerdem beispielsweise, einen 32-Bit-Datenbus für die Datenübertragung zwischen und unter den Komponenten, wie CPU 213, Hauptspeicher 215, Videospeicher 214 und Massenspeicher 212. Alternativ können Multiplexdaten-/Adresszeilen anstelle getrennter Daten- und Adresszeilen verwendet werden.
  • In einer Ausführungsform der Erfindung handelt es sich bei der CPU 213 um einen von Motorola® hergestellten Mikroprozessor, beispielsweise den 680X0-Prozessor, oder einen von Intel® hergestellten Mikroprozessor, beispielsweise den 80X86, oder einen Pentium®-Prozessor, oder einen SPARC®-Mikroprozessor von Sun Microsystems®. Jeder andere geeignete Mikroprozessor oder Mikrocomputer kann jedoch verwendet werden. Der Hauptspeicher 215 besteht aus einen Dynamischen Direktzugriffsspeicher (DRAM). Der Videospeicher 214 ist ein zweiportiger Video-Direktzugriffsspeicher. Ein Port des Videospeichers 214 ist mit einem Videoverstärker 216 verbunden. Der Videoverstärker 216 wird verwendet, um den Katodenstrahlröhren(CRT)-Raster-Monitor 217 anzutreiben. Der Videoverstäker wird dazu verwendet, den Kathodenstrahlröhren-(CRT)-Raster-Monitor 217 anzusteuern. Der Videoverstärker ist wohlbekannt und kann durch jede geeignete Vorrichtung umgesetzt werden. Diese Schaltung wandelt in dem Videospeicher 216 gespeicherte Pixeldaten in ein Rastersignal um, das sich für die Verwendung durch den Monitor 217 eignet. Der Monitor 217 ist eine Art Monitor, die sich zum Anzeigen graphischer Bilder eignet.
  • Der Computer 200 kann auch eine mit dem Bus 218 gekoppelte Kommunikationsschnittstelle 220 enthalten. Die Kommunikationsschnittstelle 220 stellt eine Zwei-Wege-Datenkommunikationskopplung über die Netzwerkverbindung 221 zu einem lokalen Netzwerk 222 bereit. Zum Beispiel stellt die Kommunikationsschnittstelle 220, wenn es sich um eine ISDN-(Integrated Services Digital Network)-Karte oder ein Modem handelt, eine Datenkommunikationsverbindung mit der entsprechenden Art von Telefonleitung bereit, welche Teil der Netzwerkverbindung 221 ist. Wenn die Kommunikationsschnittstelle 220 eine LAN-(Local Area Network)-Karte ist, dann stellt die Kommunikationsschnittstelle 220 eine Datenkommunikationsverbindung über die Netzwerkverbindung 221 zu einem kompatiblen LAN bereit. Auch drahtlose Verbindungen sind möglich. In allen derartigen Umsetzungen sendet oder empfängt die Kommunikationsschnittstelle 220 elektrische, elektromagnetische oder optische Signale, die digitale Datenströme tragen, welche für verschiedene Arten von Informationen stehen.
  • Die Netzwerkverbindung 221 stellt in der Regel über ein oder mehrere Netzwerke Datenkommunikationen zu anderen Datenvorrichtungen bereit. Beispielsweise kann eine Netzwerkverbindung 221 eine Verbindung über ein lokales Netzwerk 222 zu einem Hostcomputer 223 oder zu durch einen Internet-Service-Provider-(ISP) 224 betriebenen Datengeräten bereitstellen. Der ISP 224 stellt wiederum Datenkommunikationsdienste durch das World-Wide-Packet-Data-Kommunikationsnetzwerk bereit, das heute allgemein als „Internet" 225 bezeichnet wird. Das lokale Netzwerk 222 und das Internet 225 verwenden beide elektrische, elektromagnetische oder optische Signale, die digitale Datenströme tragen. Die Signale durch die verschiedenen Netzwerke und die Signale auf der Netzwerkverbindung 221 und durch die Kommunikationsschnittstelle 220, die die digitalen Daten zu und von dem Computer 200 tragen, sind beispielhafte Formen von Trägerwellen, die die Informationen transportieren.
  • Der Computer 200 kann über das/die Netzwerk/Netzwerke, die Netzwerkverbindung 221 und die Kommunikationsschnittstelle 220 Nachrichten senden und Daten, einschließlich eines Programmcodes, empfangen. In dem Internet-Beispiel könnte der Server 226 einen angeforderten Code für ein Anwendungsprogramm über das Internet 225, ISP 224, das lokale Netzwerk 222 und die Kommunikationsschnittstelle 220 übermitteln. Erfindungsgemäß ist eine derartige heruntergeladene Anwendung die beschriebene Vorrichtung zum Vorverarbeiten und Paketieren von Class-Dateien.
  • Der empfangene Code kann wie er empfangen wird von CPU 213 ausgeführt und/oder für die spätere Ausführung in einem Massenspeicher 212 oder in einem anderen nichtflüchtigen Speicher gespeichert werden. Auf diese Weise kann der Computer 200 einen Anwendungscode in Form einer Trägerwelle erhalten.
  • Die oben beschriebenen Computersysteme sind in jedem Fall nur exemplarisch gedacht. Eine Ausführungsform der Erfindung kann in jeder Art von Computersystem oder Programmierungs- oder Verarbeitungsumgebung umgesetzt werden.
  • Class-Datei-Struktur
  • Die Ausführungsformen der Erfindung sind unter Bezug auf Aspekte des Class-Datei-Format leichter verständlich. Im folgenden wird das Java-Class-Datei-Format beschrieben. Als Anhang A beigefügt ist dieser Beschreibung außerdem das Kapitel 4 „The Class File Format" und das Kapitel 5 „Constant Pool Resolution", aus The Java Virtual Machine Specification, von Tim Lindholm und Frank Yellin, hrsg. Von Addision-Wesley, September 1996 ©Sun Microsystems, Inc.
  • Die Java-Klassen-Datei besteht aus einer Kette von 8-Bit-Bytes, mit 16-Bit-, 32-Bit und 64-Bit-Strukturen, die aus aufeinanderfolgenden 8-Bit-Bytes bestehen. Die Class-Datei enthält eine einzelne Klasse oder Schnittstellen-Datei-Struktur. Die Class-Datei-Struktur stellt sich wie folgt dar:
    Figure 00120001
    wobei u2 und u4 sich auf vorzeichenlose Zwei-Byte- und Vier-Byte-Größen beziehen. Diese Struktur wird in 3 graphisch dargestellt.
  • Die Class-Datei 300 in 3 umfaßt Folgendes: Vier-Byte-Magic-Value 301, Zwei-Byte-Minor-Versionsnummer 302, Zwei-Byte-Major-Versionsnummer 303, Zwei-Byte-Konstanten-Pool-Zählwert 304, Konstanten-Pool-Tabelle 305, die der Konstanten-Pool-Anordnung von Elementen variabler Länge entspricht, Zwei-Byte-Zugriffs-Flag-Wert 306, Zwei-Byte-„Diese Klasse"-Kennung 307, Zwei-Byte-Super-Class-Kennung 308, Zwei-Byte-Schnittstellen-Zählwert 309, Schnittstellentabelle 310, die der Schnittstellenanordnung von Zwei-Byte-Elementen entspricht, Zwei-Byte-Feld-Zählwert 311, Feldtabelle 312, die der Feldanordnung von Elementen variabler Länge entspricht, Zwei-Byte- Methoden-Zählwert 313, Methodentabelle 314, die der Methodenanordnung der Elemente variabler Länge entspricht, Zwei-Byte-Attribut-Zählwert 315 und Attributtabelle 316, die der Attributanordnung von Elementen variabler Länge entspricht. Jede der oben genannten Strukturen wird nachstehend kurz erläutert.
  • Der Magic-Wert 301 enthält eine Zahl, die das Class-Datei-Format identifiziert. Bei dem Java-Class-Datei-Format hat die Magic-Zahl den Wert 0xCAFEBABE. Die Minor-Versionsnummer 302 und die Major-Versionsnummer 303 spezifizieren die Minor- und Majorversionsnummern des für die Erzeugung der Class-Datei verantwortlichen Kompilierers.
  • Der Konstanten-Pool-Zählwert 304 identifiziert die Anzahl von Einträgen in einer Konstanten-Pool-Tabelle 305. Die Konstanten-Pool-Tabelle 305 ist eine Tabelle mit Datenstrukturen variabler Länge, die verschiedene String-Konstanten, nummerische Konstanten, Klassennamen, Feldnamen und andere Konstanten repräsentieren, auf die innerhalb der Class-Datei-Struktur Bezug genommen wird. Jeder Eintrag in die Konstanten-Pool-Tabelle hat die folgende allgemeine Struktur:
    Figure 00130001
    wobei das Ein-Byte-„Tag" eine bestimmte Konstantenart spezifiziert. Das Format der info[]-Anordnung variiert abhängig von der Konstantenart. Die info[]-Anordnung kann ein nummerischer Wert wie für ganze Zahlen oder Floatkonstanten sein, ein Stringwert für Stringkonstanten oder ein Index zu einem anderen Eintrag einer anderen Konstantenart in der Konstanten-Pool-Tabelle. Weitere Einzelheiten der Konstanten-Pool-Tabellenstruktur und der Konstantenarten sind in Kapitel 4 Anhang A ersichtlich.
  • Der Zugriffs-Flag-Wert 306 ist eine Maske von Modifizierern, die bei Klassen- und Schnittstellenerklärungen verwendet werden. Der „Diese Klasse"-Wert 307 ist ein Index in die Konstanten-Pool-Tabelle 305 zu einer Konstantenartstruktur, die die Klasse oder die durch diese Class-Datei definierte Schnittstelle repräsentiert. Der Super-Class-Wert 308 ist entweder Null, was anzeigt, daß die Klasse eine Unterklasse von java.lang.Objekt ist, oder ein Index in die Konstanten-Pool-Tabelle zu einer Konstantenartstruktur, die die durch diese Class-Datei definierte Schnittstelle repräsentiert.
  • Der Schnittstellen-Zählwert 309 identifiziert die Anzahl von direkten Super-Schnittstellen dieser Klasse oder Schnittstelle, und entsprechend die Anzahl von Elementen in der Schnittstellen-Tabelle 310. Die Schnittstellen-Tabelle 310 enthält Zwei-Byte-Indizes in die Konstanten-Pool-Tabelle 305. Jeder entsprechende Eintrag in die Konstanten-Pool-Tabelle 305 ist eine Konstantenartstruktur, die eine Schnittstelle repräsentiert, welche eine durch diese Class-Datei definierte direkte Super-Schnittstelle der Klasse oder Schnittstelle repräsentiert.
  • Der Feld-Zählwert 311 stellt die Anzahl von Strukturen in der Feld-Tabelle 312 bereit. Jeder Eintrag in die Feld-Tabelle 312 ist eine Struktur variabler Länge, die eine Beschreibung eines Felds in der Klassenart bereitstellt. Die Feld-Tabelle 312 enthält nur jede Felder, die von der durch diese Class-Datei definierte Klasse oder Schnittstelle erklärt werden.
  • Der Methodenzählwert 313 zeigt die Anzahl von Strukturen in der Methodentabelle 314 an. Jedes Element der Methodentabelle 314 ist eine Struktur variabler Länge, die eine Beschreibung und einen Code für eine Virtual-Machine für eine Methode in der Klasse oder Schnittstelle bereitstellt.
  • Der Attributzählwert 315 gibt die Anzahl von Strukturen in der Attributtabelle 316 an. Jedes Element in der Attributtabelle 31 ist eine Attributstruktur variabler Länge. Die Attributstruktur wird in dem Abschnitt 4.7 von Anhang A erläutert.
  • Ausführungsformen der Erfindung untersuchen die Konstanten-Pool-Tabelle für jede Klasse in einer Gruppe von Klassen, um zu bestimmen, wo Doppelinformationen bestehen. Beispielsweise kann die Stringkonstante dort, wo zwei oder mehrere Klassen dieselbe Stringkonstante verwenden, aus jeder Class-Datei-Struktur entfernt und in eine gemeinsam genutzte Pool-Tabelle platziert werden. In dem einfachen Fall, wenn N Klassen denselben Konstanteneintrag aufweisen, werden N Einheiten Speicherplatz in den Speicherressourcen aufgenommen. Durch Entfernen aller Konstanteneinträge und Bereitstellen eines gemeinsamen Eintrags, werden N-1 Einheiten Speicherplatz befreit. Die Speicherplatzersparnis steigt mit N. Auch bei der Umsetzung einer gemeinsamen Konstanten-Tabelle müssen Einträge in die Konstanten-Tabelle höchstens einmal vollkommen aufgelöst werden. Nach der Anfangsauflösung können zukünftige Codereferenzen zu der Konstante die Konstante direkt verwenden.
  • Vorverarbeitung und Paketierung von Klassen
  • Eine Ausführungsform der Erfindung verwendet einen Klassen-Vorprozessor zum Paketieren von Klassen in einem „mclass"- oder Multi-Class-Datei genannten Format. Ein Verfahren zum Vorverarbeiten und Paketieren einer Gruppe von Class-Dateien wird in dem Flussdiagramm von 4 gezeigt.
  • Das Verfahren beginnt bei Schritt 400 mit einer Gruppe zufälliger Class-Dateien „S" (in der Regel Teil einer Anwendung). In Schritt 401 liest und analysiert der Vorverarbeiter jede Klasse in „S". In Schritt 402 untersucht der Vorverarbeiter die Konstanten-Pool-Tabellen jeder Klasse, um die Gruppe von Class-Datei-Konstanten (wie Strings und Zahlen und ähnliches für das Class-Datei-Format spezifisches) zu bestimmen, die von den Klassen in „S" gemeinsam genutzt werden kann. Eine gemeinsam genutzte Konstanten-Pool-Tabelle wird in Schritt 403 erstellt, wobei alle doppelten Konstanten aus Schritt 402 bestimmt werden. In Schritt 404 entfernt der Vorprozessor die doppelten, gemeinsam genutzten Konstanten von den einzelnen Konstanten-Pool-Tabellen jeder Klasse.
  • In Schritt 405 errechnet der Vorprozessor die Kern-Speicher-Erfordernisse jeder Klasse in „S", wie dies normalerweise durch den Class-Loader für die jeweilige Virtual-Machine bestimmt würde. Dies ist die Speichermenge, die eine Virtual-Machine jeder Klasse zuweisen würde, wenn sie jede Klasse einzeln laden würde. Nach Betrachten jeder Klasse in „S" und des zusätzlichen Speichererfordernisses für die gemeinsam benutzte Pool-Tabelle, wird in Schritt 406 das Gesamtspeichererfordernis zum Laden von „S" errechnet.
  • In Schritt 407 erzeugt der Vorprozessor eine Mehrfach-Klassen(mclass)-Datei, die Folgendes enthält: die in Schritt 403 erzeugte, gemeinsam genutzte Konstanten-Pool-Tabelle, Informationen über in Schritt 405 und 406 bestimmte Speicherzuweisungserfordernisse und alle Klassen in „S" mit ihren jeweils reduzierten Konstanten-Pool-Tabellen. Die mclass-Datei für die Klassengruppe „S" wird in Schritt 408 ausgegeben. In einigen Ausführungsformen kann die Mehrfach-Klassen-Datei komprimiert werden, um die Größe der Mehrfach-Klassen-Datei weiter zu verringern.
  • Ein Beispiel einer Ausführungsform einer Mehrfach-Klassen-Datei-Struktur kann wie folgt dargestellt werden:
    Figure 00160001
  • In einer Ausführungsform der Erfindung wird eine neue Konstantenart mit einem entsprechenden Konstantenart-Tag bestimmt. Die neue Konstantenart stellt als ihr info[]-Element einen Index in die gemeinsam genutzte Konstantentabelle bereit. Während der Vorverarbeitung werden doppelte Konstantenelemente in den gemeinsam genutzten Konstanten-Pool als ein gemeinsam genutztes Element platziert und ein Element der neuen Konstantenart ersetzt das doppelte Element im reduzierten Pool zur direkten Aufläsung des gemeinsam genutzten Elements im gemeinsam genutzten Konstanten-Pool. Reduktion tritt auf, weil das Ersatzelement nur ein Zeiger zu der eigentlichen Konstante ist, die im gemeinsam genutzten Konstanten-Pool platziert ist.
  • 5 ist ein vereinfachtes Blockdiagramm einer Ausführungsform des Mehrfach-Klassen-Datei-Formats. Die Mclass-Datei 500 umfaßt die gemeinsam genutzte Pool-Tabelle 501, Speicherzuweisungserfordernisse 502 und die Gruppe einzelner Klassen 503. Die Gruppe einzelner Klassen 503 umfaßt die Class-Datei-Strukturen für die Klassen 1-N (wobei N die Zahl der Klassen in der Gruppe ist), zusammen mit den entsprechenden reduzierten Konstanten-Pool-Tabellen 1-N. Die Größe der gemeinsam genutzten Konstanten-Pool-Tabelle 501 hängt von der der Anzahl der in dieser Gruppe von Klassen gefundenen doppelten Konstanten ab. Die Speicherzuweisungserfordernisse 502 können als ein einziger Wert dargestellt werden, der den für das Laden aller Klassenstrukturen (Klassen 1-N) in einzelne Klassen 503 sowie die gemeinsam genutzte Konstanten-Pool-Tabelle 501 benötigten Gesamtspeicher anzeigt. Der Zähler des gemeinsam genutzten Pools und der Zähler der Class-Datei (in 5 nicht gezeigt) kennzeichnen die Anzahl von Elementen in der gemeinsam genutzten Konstanten-Pool-Tabelle 501 und der Class-Datei-Anordnung von Class-Datei-Strukturen (durch Klassen 503 repräsentiert).
  • Die Mehrfach-Class-Datei ist in der Regel erheblich kleiner als die Summe der Größen der einzelnen Class-Dateien, aus der sie abgeleitet wurde. Sie kann durch die Virtual-Machine während oder vor der Ausführung einer Anwendung geladen werden, statt jede enthaltene Klasse nach Bedarf zu laden. Die Virtual-Machine ist auch in der Lage, die Informationen über das Zuweisungserfordernis zu nutzen, um allen für die Mehrfach-Klassen-Gruppe benötigten Speicherplatz vorher zuzuweisen. Dies löst viele der mit dem Klassen-Laden verbundenen Probleme.
  • Klassen in einer Mehrfach-Klassen-Gruppe teilen Informationen untereinander und sind daher kleiner. Dies bietet die folgenden Vorteile:
    • a) Die Klassen nehmen auf Servern oder Speichergeräten weniger Platz in Anspruch;
    • b) die Klassen beanspruchen zum Lesen weniger Netzwerk- oder Dateiübertragungszeit;
    • c) die Klassen beanspruchen beim Laden weniger Speicherplatz; und
    • d) die Ausführung ist schneller, da gemeinsam genutzte Konstanten höchstens einmal gelöst werden.
  • Mehrfach-Klassen-Gruppen konsolidieren das Laden der benötigten Klassen anstelle des Ladens der Klassen Klasse für Klasse. Mit Hilfe von Zuweisungsinformationen wird nur eine Zuweisung dynamischen Speichers benötigt anstelle von Mehrfachzuweisungsoperationen. Dies führt zu geringerer Fragementierung, weniger im Zuweiser verbrachte Zeit und weniger Verschwendung von Speicherplatz.
  • Da die Class-Dateien in einer einzigen Mehrfach-Klassen-Datei konsolidiert sind, wird nur eine einzige Transaktion benötigt, um eine Netzwerk- oder Dateisystemsuche auszuführen, eine Übertragungssitzung (z.B. HTTP) aufzustellen und die gesamte Gruppe von Klassen zu übertragen. Dies minimiert Pausen in der Ausführung, die aus solchen Transaktionen entstehen können und gewährleistet eine deterministische Ausführung ohne Pausen zum Klassenladen während eines Programmdurchlaufs. Außerdem muss der Computer, der das Programm ausführt, nicht mit der Quelle der Klassen verbunden bleiben, sobald die Mehrfach-Klassen-Datei geladen und analysiert ist.
  • 6 veranschaulicht Runtime-Daten-Gebiete der Virtual-Machine, wenn eine Mehrfach-Klassen-Datei gemäß einer Ausführungsform der Erfindung verarbeitet und geladen wird. In 6 umfassen Runtime-Daten-Gebiete 600 Mehrfach-Programm-Zähler-Register (PC REG 1-M) und Mehrfachstapel 1-M. Ein Programmzählerregister und ein Stapel sind jedem in der Virtual-Machine ausgeführten Thread zugewiesen. Jedes Programmzählerregister enthält die Adresse der Virtual-Machine-Anweisung für die aktuelle, von dem jeweiligen Thread ausgeführte Methode. Die Stapel werden von den jeweiligen Threads ausgeführt, um lokale Variablen, Teilergebnisse und einen Operandenstapel zu speichern.
  • Runtime-Daten-Gebiete 600 umfassen weiterhin den Heap 601, der das Methodengebiet 602 enthält. Der Heap 601 ist das Runtime-Daten-Gebiet, aus dem Speicher für alle Klasseninstanzen und Anordnungen zugewiesen wird. Das Methodengebiet 602 wird unter allen Threads geteilt und speichert Klassenstrukturen, wie Konstanten-Pool, Feld- und Methodendaten und den Code für die Methoden. Innerhalb des Methodengebiets 602, wird der Speicherblock 603, der zusammenhängend oder nicht zusammenhängend sein kann, der Mehrfachklassengruppe der Klassen „S" zugeordnet. Andere Gebiete im Heap 601 können ebenfalls „S" zugeordnet werden. Die reduzierten Konstanten-Pools 1-N befinden sich zusammen mit dem gemeinsam genutzten Konstanten-Pool 604 in Block 603.
  • Aufgrund des Entfernens redundanter Konstanten gemäß einer Ausführungsform der Erfindung ist die Größe von Block 603, die zum Enthalten reduzierter Konstanten-Pools 1-N und gemeinsam genutzter Konstanen-Pools 604 benötigt wird, viel kleiner, als nötig wäre, um die Konstanten-Pools 1-N aufzunehmen, wenn sie nicht reduziert wären. Die Zuweisungen in Block 603 sind auch weniger fragmentiert (und können im Speicher zusammenhängend vorgefunden werden) als der Speicher, der zugewiesen werden würde, wenn die Klassen einzeln geladen werden würden.
  • Es wurde also ein Verfahren und eine Vorrichtung zum Vorverarbeiten und Paketieren von Class-Dateien in Verbindung mit einer oder mehreren spezifischen Ausführungsformen beschrieben. Die Erfindung wird durch die Ansprüche und ihren vollen Umfang von Äquivalenten definiert.
  • Die in der oben stehenden Beschreibung, den Ansprüchen und/oder den angefügten Zeichnungen offenbarten Merkmale können, sowohl einzeln oder in jeder Kombination für die Umsetzung der Erfindung in verschiedenen Formen entscheidend sein.

Claims (23)

  1. Verfahren zur Vorverarbeitung von Class-Dateien, umfassend: Bestimmen (402) mehrerer doppelter Elemente in mehreren Class-Dateien; Bilden (403) einer zwischen den Class-Dateien gemeinsam geteilten Tabelle, welche die mehreren doppelten Elemente umfaßt; Entfernen (404) der doppelten Elemente aus den mehreren Class-Dateien, um mehrere reduzierte Class-Dateien zu erhalten; und Bilden (407) einer Multi-Class-Datei, die die mehreren reduzierten Class-Dateien und die gemeinsame Tabelle umfaßt.
  2. Verfahren nach Anspruch 1, das des weiteren umfaßt: Berechnen (405) eines individuellen Speicherzuweisungserfordernisses für jede der mehreren reduzierten Class-Dateien; Berechnen (406) eines Gesamtspeicherzuweisungserfordernisses für die mehreren Class-Dateien aus dem individuellen Speicherzuweisungserfordernis jeder der mehreren reduzierten Class-Dateien; Speichern des Gesamtspeicherzuweisungserfordernisses in der Multi-Class-Datei.
  3. Verfahren nach Anspruch 2, das des weiteren umfaßt: Lesen des Gesamtspeicherzuweisungserfordernisses aus der Multi-Class-Datei; Zuweisen eines Teils eines Speichers basierend auf dem Gesamtspeicherzuweisungserfordernis; und Laden der reduzierten Class-Dateien und der gemeinsamen Tabelle in den Teil des Speichers.
  4. Verfahren nach Anspruch 3, das des weiteren umfaßt: Zugreifen auf die gemeinsame Tabelle im Teil des Speichers, um eines oder mehrere in einer oder mehreren der reduzierten Class-Dateien nicht gefundene Elemente zu erhalten.
  5. Verfahren nach Anspruch 1, wobei der Schritt (402) des Bestimmens mehrerer doppelter Elemente umfaßt: Bestimmen einer oder mehrerer zwischen zwei oder mehreren Class-Dateien gemeinsam geteilter Konstanten.
  6. Verfahren nach Anspruch 5, wobei der Schritt des Bildens (403) einer gemeinsamen Tabelle umfaßt: Bilden einer gemeinsamen Konstanten-Tabelle, die eine oder mehrere zwischen den zwei oder mehreren Class-Dateien gemeinsam geteilte Konstanten umfaßt.
  7. Computerprogrammprodukt, welches umfaßt: ein computernutzbares Medium mit einem darin implementierten computerlesbaren Programmcode zur Vorverarbeitung von Class-Dateien, wobei das Computerprogrammprodukt umfaßt: einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, mehrere doppelte Elemente in mehreren Class-Dateien zu bestimmen (402); einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, eine zwischen den Class-Dateien gemeinsam geteilte Tabelle zu bilden (403), welche die mehreren doppelten Elemente umfaßt: einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, die doppelten Elemente aus den mehreren Class-Dateien zu entfernen (402), um mehrere reduzierte Class-Dateien zu erhalten; einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, eine Multi-Class-Datei zu bilden (407), welche die mehreren reduzierten Class-Dateien und die gemeinsame Tabelle umfaßt.
  8. Computerprogrammprodukt nach Anspruch 7, das des weiteren umfaßt: einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, ein individuelles Speicherzuweisungserfordernis jeder der mehreren reduzierten Class-Dateien zu berechnen (405); einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, ein Gesamtspeicherzuweisungserfordernis der mehreren Class-Dateien aus dem individuellen Speicherzuweisungserfordernis jeder der mehreren reduzierten Class-Dateien zu berechnen (406); und einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, das Gesamtspeicherzuweisungserfordernis in der Multi-Class-Datei zu speichern.
  9. Computerprogrammprodukt nach Anspruch 8, das des weiteren umfaßt: einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, das Gesamtspeicherzuweisungserfordernis aus der Multi-Class-Datei zu lesen; einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, einen Teil eines Speichers basierend auf dem Gesamtspeicherzuweisungserfordernis zuzuweisen; einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, die reduzierten Class-Dateien und die gemeinsame Tabelle in den Teil des Speichers zu laden.
  10. Computerprogrammprodukt nach Anspruch 9, das des weiteren umfaßt: einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, auf die gemeinsame Tabelle in dem Teil des Speichers zuzugreifen, um eines oder mehrere in einer oder mehreren der reduzierten Class-Dateien nicht gefundene Elemente zu erhalten.
  11. Computerprogrammprodukt nach Anspruch 7, wobei der computerlesbare Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, die mehreren doppelten Elemente zu bestimmen (402), umfaßt: einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, eine oder mehrere zwischen zwei oder mehreren Class-Dateien gemeinsam geteilte Konstanten zu bestimmen.
  12. Computerprogrammprodukt nach Anspruch 11, wobei der computerlesbare Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, die gemeinsame Tabelle zu bilden, umfaßt: einen computerlesbaren Programmcode, der konfiguriert ist, einen Computer dazu zu veranlassen, eine gemeinsame Konstanten-Tabelle zu bilden, die die eine oder mehreren zwischen den zwei oder mehreren Class-Dateien gemeinsam geteilten Konstanten umfaßt.
  13. Vorrichtung, umfassend: einen Prozessor; einen mit dem Prozessor gekoppelten Speicher; mehrere im Speicher gespeicherte Class-Dateien; einen auf dem Prozessor ablaufenden Prozeß, wobei der Prozeß konfiguriert ist, eine Multi-Class-Datei zu bilden, die umfaßt: mehrere reduzierte Class-Dateien (503), die aus den mehreren Class-Dateien durch Entfernen eines oder mehrerer Elemente, die in zwei oder mehr der mehreren Class-Dateien doppelt sind, erhalten sind; und eine zwischen den Class-Dateien gemeinsam geteilte Tabelle (501), welche die doppelten Elemente umfaßt.
  14. Vorrichtung nach Anspruch 13, wobei die Multi-Class-Datei des weiteren ein Speichererfordernis (502) umfaßt, wobei das Speichererfordernis durch den Prozeß berechnet wird.
  15. Vorrichtung nach Anspruch 13, wobei die doppelten Elemente Elemente von Konstanten-Datenbasen jeweiliger Class-Dateien umfassen, wobei die gemeinsame Tabelle (501) einen gemeinsamen Konstanten-Pool umfaßt.
  16. Vorrichtung nach Anspruch 13, die des weiteren umfaßt: eine Virtual-Machine mit einem Class-Loader und einem Runtime-Datenbereich, wobei der Class-Loader konfiguriert ist, die Multi-Class-Datei in den Runtime-Datenbereich zu erhalten und zu laden.
  17. Vorrichtung nach Anspruch 16, wobei der Class-Loader konfiguriert ist, einen Teil des Runtime-Datenbereichs basierend auf dem Speichererfordernis (502) in der Multi-Class-Datei zuzuweisen.
  18. Vorrichtung nach Anspruch 17, wobei der Class-Loader konfiguriert ist, die mehreren reduzierten Class-Dateien (503) und die gemeinsame Tabelle (501) in den Teil des Runtime-Datenbereichs zu laden.
  19. Vorrichtung nach Anspruch 16, wobei die Virtual-Machine konfiguriert ist, auf die gemeinsame Tabelle (501) zuzugreifen, wenn ein gewünschtes mit einer ersten Class-Datei in Verbindung stehendes Element nicht in einer entsprechenden der mehreren reduzierten Class-Dateien (503) vorhanden ist.
  20. Vorrichtung nach einem der Ansprüche 13 bis 19, umfassend einen Speicher, der konfiguriert ist, Daten für einen Zugriff durch eine Virtual-Machine, die in einem Computersystem ausführt, zu speichern, wobei der Speicher umfaßt: eine im Speicher gespeicherte Datenstruktur, wobei die Datenstruktur umfaßt: mehrere reduzierte Class-Dateien (503), die mit mehreren entsprechenden Classes zusammenhängen, wobei die mehreren reduzierten Class-Dateien (503) konfiguriert sind, durch die Virtual-Machine zur Ausführung der mehreren Classes geladen zu werden; eine zwischen den Class-Dateien gemeinsam geteilte Tabelle (501), die eines oder mehrere Elemente umfaßt, die in zwei oder mehreren der mehreren Classes doppelt sind, wobei die gemeinsame Tabelle (501) konfiguriert ist, in die Virtual-Machine geladen zu werden, damit darauf für die doppelten Elemente zugegriffen werden kann; und einen Speichererforderniswert (502), der konfiguriert ist, durch einen Class-Loader der Virtual-Machine gelesen zu werden, um einen Teil eines Runtime-Datenbereichs zum Laden der mehreren reduzierten Class-Dateien (503) und der gemeinsamen Tabelle (501) zuzuweisen.
  21. Vorrichtung nach Anspruch 20, wobei die doppelten Elemente aus den mehreren reduzierten Class-Dateien (503) entfernt sind.
  22. Vorrichtung nach Anspruch 20, wobei die doppelten Elemente Konstanten aufweisen und die gemeinsame Tabelle (501) einen gemeinsamen Konstanten-Pool aufweist.
  23. Vorrichtung nach Anspruch 20, wobei der Speichererforderniswert (502) aus individuellen Speichererfordernissen der mehreren reduzierten Class-Dateien (503) und einem Speichererfordernis der gemeinsamen Tabelle (501) berechnet wird.
DE69834087T 1997-10-31 1998-10-28 Verfahren und Gerät zur Vorverarbeitung und Verpackung von Klassendateien Expired - Lifetime DE69834087T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/961,874 US5966702A (en) 1997-10-31 1997-10-31 Method and apparatus for pre-processing and packaging class files
US961874 1997-10-31

Publications (2)

Publication Number Publication Date
DE69834087D1 DE69834087D1 (de) 2006-05-18
DE69834087T2 true DE69834087T2 (de) 2006-11-23

Family

ID=25505128

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69834087T Expired - Lifetime DE69834087T2 (de) 1997-10-31 1998-10-28 Verfahren und Gerät zur Vorverarbeitung und Verpackung von Klassendateien

Country Status (5)

Country Link
US (2) US5966702A (de)
EP (1) EP0913769B1 (de)
JP (1) JP2000029706A (de)
KR (1) KR100562398B1 (de)
DE (1) DE69834087T2 (de)

Families Citing this family (219)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6145119A (en) * 1997-03-31 2000-11-07 International Business Machines Corporation Programming development environment for intranet and internet applications employing unique project data structure
US6292827B1 (en) * 1997-06-20 2001-09-18 Shore Technologies (1999) Inc. Information transfer systems and method with dynamic distribution of data, control and management of information
US6314429B1 (en) * 1997-10-08 2001-11-06 Mitel Corporation Bi-directional conversion library
US6349344B1 (en) * 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
EP1057121B1 (de) * 1998-02-17 2006-10-04 Intergraph Hardware Technologies Company Apparat und verfahren zum übermitteln von dokumenten zwischen einem server-rechner und einem benutzer-rechner
US6199196B1 (en) * 1998-03-20 2001-03-06 Sun Microsystems, Inc. Methods and apparatus for linking a program for remote execution
US6493870B1 (en) * 1998-03-20 2002-12-10 Sun Microsystems, Inc. Methods and apparatus for packaging a program for remote execution
US6658492B1 (en) * 1998-03-20 2003-12-02 Sun Microsystems, Inc. System and method for reducing the footprint of preloaded classes
JPH11272825A (ja) * 1998-03-24 1999-10-08 Toshiba Corp アクセス管理方法及びその装置
US6061520A (en) * 1998-04-07 2000-05-09 Sun Microsystems, Inc. Method and system for performing static initialization
US6263489B1 (en) * 1998-04-30 2001-07-17 Hewlett-Packard Company Method and apparatus for debugging of optimized code
US6434741B1 (en) 1998-04-30 2002-08-13 Hewlett-Packard Company Method and apparatus for debugging of optimized code using emulation
US6105066A (en) * 1998-05-05 2000-08-15 International Business Machines Corp. Client-server system with central application management and using fully qualified class names of object-oriented applications for determining permanent server storage locations for application configuration information
US20020138640A1 (en) * 1998-07-22 2002-09-26 Uri Raz Apparatus and method for improving the delivery of software applications and associated data in web-based systems
US7197570B2 (en) 1998-07-22 2007-03-27 Appstream Inc. System and method to send predicted application streamlets to a client device
US20010044850A1 (en) 1998-07-22 2001-11-22 Uri Raz Method and apparatus for determining the order of streaming modules
US6311221B1 (en) * 1998-07-22 2001-10-30 Appstream Inc. Streaming modules
US20010037400A1 (en) * 1998-07-22 2001-11-01 Uri Raz Method and system for decreasing the user-perceived system response time in web-based systems
US6289012B1 (en) 1998-08-03 2001-09-11 Instanton Corporation High concurrency data download apparatus and method
US6430569B1 (en) * 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
US6708181B1 (en) * 1998-09-01 2004-03-16 International Business Machines Corporation System and method for initializing variables in an object-oriented program
GB2341463B (en) * 1998-09-12 2003-02-19 Ibm Software file loading
US6366898B2 (en) * 1998-09-21 2002-04-02 Sun, Microsystems, Inc. Method and apparatus for managing classfiles on devices without a file system
US6154842A (en) * 1998-10-13 2000-11-28 Motorola, Inc. Method and system for reducing time and power requirements for executing computer-readable instruction streams in an execution environment having run-time security constraints
US6336122B1 (en) * 1998-10-15 2002-01-01 International Business Machines Corporation Object oriented class archive file maker and method
JP2000122876A (ja) * 1998-10-16 2000-04-28 Matsushita Electric Ind Co Ltd 情報処理装置
GB2343021A (en) * 1998-10-19 2000-04-26 Ibm Class loading model for object oriented programming
US6385643B1 (en) 1998-11-05 2002-05-07 Bea Systems, Inc. Clustered enterprise Java™ having a message passing kernel in a distributed processing system
US6236999B1 (en) * 1998-11-05 2001-05-22 Bea Systems, Inc. Duplicated naming service in a distributed processing system
US6571274B1 (en) 1998-11-05 2003-05-27 Beas Systems, Inc. Clustered enterprise Java™ in a secure distributed processing system
US6581088B1 (en) 1998-11-05 2003-06-17 Beas Systems, Inc. Smart stub or enterprise javaTM bean in a distributed processing system
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
CA2255035C (en) * 1998-11-30 2002-01-29 Victor Shih-Chuan Chan Archiving tool
US6295643B1 (en) * 1998-12-10 2001-09-25 International Business Machines Corporation Method and apparatus for improving java virtual machine performance using persistent execution information
US6223224B1 (en) * 1998-12-17 2001-04-24 International Business Machines Corporation Method and apparatus for multiple file download via single aggregate file serving
GB2345160B (en) * 1998-12-23 2003-08-20 Ibm Virtual machine memory management
GB2345159B (en) * 1998-12-23 2003-08-20 Ibm Virtual machine memory management
US6446060B1 (en) * 1999-01-26 2002-09-03 International Business Machines Corporation System and method for sequential processing for content-based retrieval of composite objects
US6684393B1 (en) 1999-01-29 2004-01-27 International Business Machines Corporation Compilation method and system to reuse memory storage instead of allocating it
US6880155B2 (en) * 1999-02-02 2005-04-12 Sun Microsystems, Inc. Token-based linking
US6542899B1 (en) * 1999-02-19 2003-04-01 Sun Microsystems, Inc. Method and system for expressing information from an object-oriented database in a grammatical form
US7283991B1 (en) * 1999-03-11 2007-10-16 Microsoft Corporation Caching system for path search optimization
US6321240B1 (en) * 1999-03-15 2001-11-20 Trishul M. Chilimbi Data structure partitioning with garbage collection to optimize cache utilization
US6845498B1 (en) * 1999-05-11 2005-01-18 Microsoft Corporation Method and apparatus for sharing data files among run time environment applets in an integrated circuit card
US6763397B1 (en) 1999-05-27 2004-07-13 Sun Microsystems, Inc. Fully lazy linking
US6601114B1 (en) 1999-05-27 2003-07-29 Sun Microsystems, Inc. Fully lazy linking with module-by-module verification
US6618769B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Module-by-module verification
US6766521B1 (en) 1999-05-27 2004-07-20 Sun Microsystems, Inc. Dataflow algorithm for symbolic computation of lowest upper bound type
US6618855B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Caching untrusted modules for module-by-module verification
US6490616B1 (en) 1999-06-14 2002-12-03 Wind River International, Ltd. Method and apparatus for incremental download from server to client
US6857015B1 (en) 1999-06-14 2005-02-15 Wind River International, Ltd. Method and system for remotely observing and controlling objects
US6584612B1 (en) * 1999-07-15 2003-06-24 International Business Machines Corporation Transparent loading of resources from read-only memory for an application program
US6834284B2 (en) * 1999-08-12 2004-12-21 International Business Machines Corporation Process and system for providing name service scoping behavior in java object-oriented environment
US7882501B1 (en) * 1999-08-13 2011-02-01 Oracle America, Inc. System and method for enabling dynamic modifed class reloading in an application server environment
US6845503B1 (en) * 1999-08-13 2005-01-18 Sun Microsystems, Inc. System and method for enabling atomic class loading in an application server environment
GB9921721D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US6438560B1 (en) * 1999-09-16 2002-08-20 International Business Machines Corporation Reuse of immutable objects during object creation
EP1091276A1 (de) * 1999-10-06 2001-04-11 Alcatel Vorrichtung und Verfahren zur Authentifizierung von Hypertext-Ressourcen durch elektronischen Unterschriften
US6829761B1 (en) * 1999-10-21 2004-12-07 Oracle International Corporation Method and apparatus for managing shared memory in a run-time environment
US6634022B1 (en) 1999-10-28 2003-10-14 Koninklijke Philips Electronics N.V. Method for platform specific efficiency enhancement of java programs and software product therefor
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
EP1109104A1 (de) * 1999-12-14 2001-06-20 Sun Microsystems, Inc. Löschung von unbenutzten Datenschablonen
US6983315B1 (en) 2000-01-18 2006-01-03 Wrq, Inc. Applet embedded cross-platform caching
AU2001239492A1 (en) * 2000-02-07 2001-08-14 Insignia Solutions Plc Global constant pool to allow deletion of constant pool entries
WO2001061486A2 (en) * 2000-02-17 2001-08-23 Interactive Video Technologies, Inc. Incremental bootstrap class loader
JP2001312406A (ja) * 2000-02-21 2001-11-09 Matsushita Electric Ind Co Ltd プログラム生成装置
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 インタプリタ型言語によるプログラムの実行方法およびその方法を用いた情報処理装置
US6675375B1 (en) * 2000-04-28 2004-01-06 Sun Microsystems, Inc. Method and apparatus for optimized multiprocessing in a safe language
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
US6651186B1 (en) * 2000-04-28 2003-11-18 Sun Microsystems, Inc. Remote incremental program verification using API definitions
US6976061B1 (en) * 2000-05-24 2005-12-13 Sun Microsystems, Inc. Resource adapter and XML descriptor for use in a client server environment utilizing an enterprise information system
US7085810B1 (en) * 2000-05-31 2006-08-01 International Business Machines Corporation Dynamic command sets in a computer messaging system in a method, system and program
US6941410B1 (en) * 2000-06-02 2005-09-06 Sun Microsystems, Inc. Virtual heap for a virtual machine
US6865657B1 (en) * 2000-06-02 2005-03-08 Sun Microsystems, Inc. Garbage collector for a virtual heap
US6934755B1 (en) 2000-06-02 2005-08-23 Sun Microsystems, Inc. System and method for migrating processes on a network
JP4280957B2 (ja) * 2000-08-17 2009-06-17 ソニー株式会社 画像処理装置および方法、並びに記録媒体
US6918126B1 (en) * 2000-09-08 2005-07-12 International Business Machines Corporation Method and apparatus for creating and enforcing protected system level Java code
US6981245B1 (en) * 2000-09-14 2005-12-27 Sun Microsystems, Inc. Populating binary compatible resource-constrained devices with content verified using API definitions
US7051315B2 (en) 2000-09-26 2006-05-23 Appstream, Inc. Network streaming of multi-application program code
US6810519B1 (en) * 2000-09-29 2004-10-26 International Business Machines Corporation Achieving tight binding for dynamically loaded software modules via intermodule copying
US7013455B1 (en) 2000-10-19 2006-03-14 International Business Machines Corporation System for automatically altering environment variable to run proper executable file by removing references to all except one duplicate file in the path sequence
US6839712B1 (en) 2000-10-26 2005-01-04 International Business Machines Corporation Pre-processing code to identify and modify format of keys
US20020078165A1 (en) * 2000-12-14 2002-06-20 International Business Machines Corporation System and method for prefetching portions of a web page based on learned preferences
US6851111B2 (en) * 2000-12-15 2005-02-01 International Business Machines Corporation System and method for class loader constraint checking
US6892377B1 (en) * 2000-12-21 2005-05-10 Vignette Corporation Method and system for platform-independent file system interaction
US7349912B2 (en) * 2000-12-22 2008-03-25 Oracle International Corporation Runtime modification of entries in an identity system
US7581011B2 (en) 2000-12-22 2009-08-25 Oracle International Corporation Template based workflow definition
US7363339B2 (en) * 2000-12-22 2008-04-22 Oracle International Corporation Determining group membership
US7711818B2 (en) 2000-12-22 2010-05-04 Oracle International Corporation Support for multiple data stores
US7415607B2 (en) 2000-12-22 2008-08-19 Oracle International Corporation Obtaining and maintaining real time certificate status
US7085834B2 (en) 2000-12-22 2006-08-01 Oracle International Corporation Determining a user's groups
US7475151B2 (en) 2000-12-22 2009-01-06 Oracle International Corporation Policies for modifying group membership
US7380008B2 (en) 2000-12-22 2008-05-27 Oracle International Corporation Proxy system
US8015600B2 (en) 2000-12-22 2011-09-06 Oracle International Corporation Employing electronic certificate workflows
US7213249B2 (en) * 2000-12-22 2007-05-01 Oracle International Corporation Blocking cache flush requests until completing current pending requests in a local server and remote server
US7937655B2 (en) 2000-12-22 2011-05-03 Oracle International Corporation Workflows with associated processes
US7802174B2 (en) 2000-12-22 2010-09-21 Oracle International Corporation Domain based workflows
US20060036941A1 (en) * 2001-01-09 2006-02-16 Tim Neil System and method for developing an application for extending access to local software of a wireless device
US7107537B2 (en) * 2001-01-16 2006-09-12 Hewlett-Packard Development Company, L.P. Apparatus and method for updating applications to embedded devices and peripherals within a network environment
EP1374046B1 (de) * 2001-02-23 2012-02-22 Microsoft Corporation System und verfahren zum transformieren von objektkodes
US20020170047A1 (en) * 2001-02-23 2002-11-14 Brian Swetland System and method for transforming object code
US6751790B2 (en) * 2001-05-09 2004-06-15 Sun Microsystems, Inc. Frameworks for efficient representation of string objects in Java programming environments
US6996824B2 (en) * 2001-05-09 2006-02-07 Sun Microsystems, Inc. Frameworks for efficient representation of string objects in Java programming environments
US6986129B2 (en) * 2001-05-16 2006-01-10 Sun Microsystems, Inc. System and method for java preprocessor
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
CA2448962C (en) * 2001-05-30 2009-10-06 Research In Motion Limited A mobile communications device application processing system
US7171422B2 (en) * 2001-06-02 2007-01-30 Iona Technologies Caching system for nested archives
US8205193B2 (en) * 2001-06-11 2012-06-19 Hewlett-Packard Development Company, L.P. Runtime updating of virtual machine class files
EP1333374B1 (de) * 2001-06-11 2016-09-07 Sap Se Dynamische Erzeugung von sprachlokalisierten und selbstprüfenden Javaklassen unter Verwendung von XML Beschreibungen und statischen Initialisatoren
US7082597B2 (en) * 2001-06-20 2006-07-25 Sun Microsystems, Inc. Representation of objects in a Java programming environment
US6901589B2 (en) * 2001-06-25 2005-05-31 Wind River Systems, Inc. System and method for determining a root cause of a failure
US6732108B2 (en) 2001-07-12 2004-05-04 International Business Machines Corporation Class file archives with reduced data volume
US7036120B2 (en) * 2001-07-31 2006-04-25 Sun Microsystems, Inc. Two tier clusters for representation of objects in Java programming environments
US6934944B2 (en) * 2001-08-13 2005-08-23 International Business Machines Corporation Computer system and method for constant pool operations
US7213240B2 (en) 2001-10-05 2007-05-01 Sun Microsystems, Inc. Platform-independent selective ahead-of-time compilation
US7093242B2 (en) * 2001-11-19 2006-08-15 Hewlett-Packard Development Company, L.P. Dynamic class interposition
US6976254B2 (en) 2001-11-28 2005-12-13 Esmertec Ag Inter-method control transfer for execution engines with memory constraints
US7225256B2 (en) 2001-11-30 2007-05-29 Oracle International Corporation Impersonation in an access system
US6938241B1 (en) * 2001-12-10 2005-08-30 Lsi Logic Corporation Compiler independent bit-field macros
US7319948B2 (en) * 2002-05-06 2008-01-15 Sun Microsystems, Inc. Blocking access to selected APIs
US7840658B2 (en) 2002-05-15 2010-11-23 Oracle International Corporation Employing job code attributes in provisioning
US7216163B2 (en) 2002-05-15 2007-05-08 Oracle International Corporation Method and apparatus for provisioning tasks using a provisioning bridge server
US7506323B2 (en) 2002-06-18 2009-03-17 Panasonic Corporation Program execution processing terminal device, program execution processing method, and program
US7745203B2 (en) * 2002-07-31 2010-06-29 Kabushiki Kaisha Toshiba Base sequence detection apparatus and base sequence automatic analyzing apparatus
US7165076B2 (en) * 2002-11-15 2007-01-16 Check Point Software Technologies, Inc. Security system with methodology for computing unique security signature for executable file employed across different machines
US7761861B2 (en) 2002-11-29 2010-07-20 Research In Motion Limited Method for generating interpretable code for storage in a device having limited storage
US7263696B1 (en) * 2002-12-10 2007-08-28 Emc Corporation Dynamic web based jar file finder
US7051324B2 (en) * 2003-01-16 2006-05-23 International Business Machines Corporation Externalized classloader information for application servers
KR100493893B1 (ko) * 2003-02-07 2005-06-10 삼성전자주식회사 자바 프로그램에서 클래스 로딩 과정을 단축시키는 시스템및 방법
US7073171B2 (en) * 2003-02-28 2006-07-04 Bea Systems, Inc. EJB implementation class loading with removed dependencies with ability to replace EJB implementation class without full redeployment
US7644401B2 (en) * 2003-04-24 2010-01-05 International Business Machines Corporation Executable file creation
US7685581B2 (en) * 2003-06-27 2010-03-23 Microsoft Corporation Type system for representing and checking consistency of heterogeneous program components during the process of compilation
US7305666B2 (en) * 2003-07-23 2007-12-04 Microsoft Corporation Description language for an extensible compiler and tools infrastructure
US7120898B2 (en) * 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models
US7146606B2 (en) * 2003-06-26 2006-12-05 Microsoft Corporation General purpose intermediate representation of software for software development tools
US7086041B2 (en) * 2003-06-27 2006-08-01 Microsoft Corporation Extensible type system for representing and checking consistency of program components during the process of compilation
US7559050B2 (en) * 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7788652B2 (en) * 2003-06-27 2010-08-31 Microsoft Corporation Representing type information in a compiler and programming tools framework
US20050028152A1 (en) * 2003-08-01 2005-02-03 International Business Machines Corporation Method and apparatus for identifying a Java class package name without disassembling Java bytecodes
US8862686B2 (en) * 2003-08-28 2014-10-14 International Business Machines Corporation System and method for providing shared web modules
US20050060272A1 (en) * 2003-09-11 2005-03-17 Wen-Hua Lin Embedded system program code reduction method and system
JP4097584B2 (ja) * 2003-09-19 2008-06-11 株式会社リコー Wwwサーバ機能を有する組み込み機器、ウェブページ提供方法、および、ウェブページ提供制御プログラム
US7340447B2 (en) 2003-10-09 2008-03-04 Oracle International Corporation Partitioning data access requests
US7904487B2 (en) 2003-10-09 2011-03-08 Oracle International Corporation Translating data access requests
US7882132B2 (en) 2003-10-09 2011-02-01 Oracle International Corporation Support for RDBMS in LDAP system
US7188339B2 (en) * 2003-10-24 2007-03-06 Hewlett-Packard Development Company, L.P. ACPI preprocessor
US7480895B2 (en) * 2003-11-24 2009-01-20 International Business Machines Corporation Web application development tool
US7313820B2 (en) * 2003-12-29 2007-12-25 International Business Machines Corporation Method and system for providing an authorization framework for applications
US20050155024A1 (en) * 2004-01-14 2005-07-14 Jeffrey Wannamaker Method of transforming java bytecode into a directly interpretable compressed format
US7275069B2 (en) * 2004-04-26 2007-09-25 Tarari, Inc. System and method for tokening documents
US7380214B1 (en) 2004-04-29 2008-05-27 Sap Ag Graphical user interface with an error reporting system
US7360170B1 (en) * 2004-04-29 2008-04-15 Sap Ag Graphical user interface and background search methodology for creating references between software components
US8627283B2 (en) * 2004-04-29 2014-01-07 Sap Ag Graphical user interface with a background class loading event system
US7412700B2 (en) * 2004-05-18 2008-08-12 Oracle International Corporation Product packaging and installation mechanism
US8522205B2 (en) * 2004-05-18 2013-08-27 Oracle International Corporation Packaging multiple groups of read-only files of an application's components into multiple shared libraries
US7546593B2 (en) 2004-05-28 2009-06-09 Sap Ag Common class loaders
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.
US7647581B2 (en) * 2004-06-30 2010-01-12 International Business Machines Corporation Evaluating java objects across different virtual machine vendors
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement
US7516149B2 (en) 2004-08-30 2009-04-07 Microsoft Corporation Robust detector of fuzzy duplicates
US7630974B2 (en) 2004-09-28 2009-12-08 Oracle International Corporation Multi-language support for enterprise identity and access management
JP4575860B2 (ja) * 2004-10-21 2010-11-04 株式会社リコー 画像形成装置、インストール方法、インストールプログラム、及び記録媒体
US7849459B2 (en) * 2004-11-04 2010-12-07 International Business Machines Corporation Deploying java applications in resource constrained environments
US7444629B2 (en) * 2004-11-12 2008-10-28 International Business Machines Corporation Autonomic self-healing of java resources
MY135555A (en) * 2004-12-14 2008-05-30 Axiomatic Solutions Sdn Bhd Compile time linking via hashing technique
US9535679B2 (en) * 2004-12-28 2017-01-03 International Business Machines Corporation Dynamically optimizing applications within a deployment server
US7581216B2 (en) * 2005-01-21 2009-08-25 International Business Machines Corporation Preserving platform independence with native accelerators for performance critical program objects
US7574700B2 (en) * 2005-03-31 2009-08-11 Sun Microsystems, Inc. Supporting dynamically-typed languages in typed assembly languages
US7703089B2 (en) * 2005-04-29 2010-04-20 Sap Ag Compatibility framework using versioning class loaders
DE102005061659A1 (de) * 2005-12-22 2007-06-28 Giesecke & Devrient Gmbh Sicherung eines tragbaren Datenträgers gegen Angriffe
US7627863B2 (en) * 2006-01-13 2009-12-01 Microsoft Corporation Typed intermediate language support for languages with multiple inheritance
US8250559B2 (en) * 2006-04-12 2012-08-21 Oracle America, Inc. Supporting per-program classpaths with class sharing in a multi-tasking virtual machine
US7814498B2 (en) * 2006-05-01 2010-10-12 Microsoft Corporation Loading application resources
US8351919B2 (en) * 2006-10-23 2013-01-08 Research In Motion Limited Apparatus, and associated method, by which to store specific network identifiers at a wireless device
US9183011B2 (en) * 2006-10-31 2015-11-10 Oracle America Inc. Method and system for runtime environment emulation
US8892533B2 (en) * 2007-09-28 2014-11-18 Apple Inc. Accelerated cached object retrieval
US8127284B2 (en) * 2007-10-16 2012-02-28 Microsoft Corporation On-demand loading of types of software code of a program executing on a computing device
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
US8875115B2 (en) * 2008-11-29 2014-10-28 International Business Machines Corporation Type merging technique to reduce class loading during Java verification
US9450783B2 (en) * 2009-05-28 2016-09-20 Red Hat, Inc. Abstracting cloud management
WO2011018852A1 (ja) * 2009-08-13 2011-02-17 株式会社日立ソリューションズ 重複排除機能付きデータ格納装置及び当該データ格納装置の検索インデックスを作成する制御装置
CN102147734B (zh) * 2010-02-10 2016-01-13 甲骨文国际公司 运行时类提取的方法和系统
US8984009B2 (en) 2010-04-21 2015-03-17 Salesforce.Com, Inc. Methods and systems for utilizing bytecode in an on-demand service environment including providing multi-tenant runtime environments and systems
US8499299B1 (en) 2010-06-29 2013-07-30 Ca, Inc. Ensuring deterministic thread context switching in virtual machine applications
US8732670B1 (en) 2010-06-29 2014-05-20 Ca, Inc. Ensuring determinism during programmatic replay in a virtual machine
US8769518B1 (en) 2010-06-29 2014-07-01 Ca, Inc. Ensuring determinism during programmatic replay in a virtual machine
US8839215B2 (en) * 2010-07-19 2014-09-16 International Business Machines Corporation String cache file for optimizing memory usage in a java virtual machine
CN102810065B (zh) 2011-05-31 2016-04-27 国际商业机器公司 用于加载程序模块的方法和系统
US10346938B2 (en) 2011-08-09 2019-07-09 Drfirst.Com, Inc. Systems and methods for providing supplemental materials to increase patient adherence to prescribed medication
US20130246082A1 (en) 2012-03-16 2013-09-19 Brandon Anthony Brylawski Systems and Methods for Supplementing Patient and Provider Interactions to Increase Patient Adherence Specifically Using Combined Educational Coupons and Tailored Educational Documents and Services
CA2759516C (en) 2011-11-24 2019-12-31 Ibm Canada Limited - Ibm Canada Limitee Serialization of pre-initialized objects
CA2753626C (en) * 2011-09-30 2019-05-07 Ibm Canada Limited - Ibm Canada Limitee Packed data objects
US8843912B2 (en) 2012-02-20 2014-09-23 International Business Machines Corporation Optimization of an application to reduce local memory usage
US10832364B2 (en) 2012-03-16 2020-11-10 Drfirst.Com, Inc. Information system for physicians
US9043934B2 (en) * 2012-04-06 2015-05-26 Wayne Odom System, method, and device for delivering communications and storing and delivering data
US8892876B1 (en) 2012-04-20 2014-11-18 Trend Micro Incorporated Secured application package files for mobile computing devices
US9092306B1 (en) 2012-04-27 2015-07-28 Trend Micro Incorporated Lightweight data leakage detection for mobile computing devices
US20130304510A1 (en) 2012-05-08 2013-11-14 Drfirst.Com, Inc. Health information exchange system and method
US8677495B1 (en) 2012-05-24 2014-03-18 Trend Micro Incorporated Dynamic trap for detecting malicious applications in computing devices
US9383448B2 (en) 2012-07-05 2016-07-05 Deca System Co., Ltd. Golf GPS device with automatic hole recognition and playing hole selection
US10333820B1 (en) * 2012-10-23 2019-06-25 Quest Software Inc. System for inferring dependencies among computing systems
US9785456B2 (en) * 2014-04-22 2017-10-10 Oracle International Corporation Metadata-driven dynamic specialization
US9355011B2 (en) 2014-06-09 2016-05-31 International Business Machines Corporation Detecting potential class loader problems using the class search path sequence for each class loader
US9535666B2 (en) * 2015-01-29 2017-01-03 AppDynamics, Inc. Dynamic agent delivery
US9762385B1 (en) * 2015-07-20 2017-09-12 Trend Micro Incorporated Protection of program code of apps of mobile computing devices
CN106802860B (zh) * 2015-11-25 2020-09-01 阿里巴巴集团控股有限公司 无用类检测方法及装置
JP2017126293A (ja) * 2016-01-15 2017-07-20 キヤノン株式会社 情報処理装置及びリソース管理方法
GB2554083A (en) * 2016-09-16 2018-03-28 Siemens Rail Automation Holdings Ltd Method for operating a computer, method for controlling a railway network and computer program product
CN110119274A (zh) 2018-02-05 2019-08-13 北京智明星通科技股份有限公司 一种数据编译的方法、装置以及电子终端、计算机可读存储介质
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
CN115858220A (zh) * 2022-12-15 2023-03-28 中电金信软件有限公司 一种错误码共享方法、系统、计算机设备及可读存储介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5111395A (en) * 1989-11-03 1992-05-05 Smith Rodney A Automated fund collection system including means to eliminate duplicate entries from a mailing list
US5488725A (en) * 1991-10-08 1996-01-30 West Publishing Company System of document representation retrieval by successive iterated probability sampling
US5367675A (en) * 1991-12-13 1994-11-22 International Business Machines Corporation Computer automated system and method for optimizing the processing of a query in a relational database system by merging subqueries with the query
US5497486A (en) * 1994-03-15 1996-03-05 Salvatore J. Stolfo Method of merging large databases in parallel
DE69526165T2 (de) * 1994-09-19 2002-10-31 Sun Microsystems Inc Verfahren und Einrichtung für das Aufrufen von Objekten mit Schnittstellenvererbung
US5838965A (en) * 1994-11-10 1998-11-17 Cadis, Inc. Object oriented database management system
US5548754A (en) * 1995-02-07 1996-08-20 International Business Machines Corporation Optimization of SQL queries using early-out join transformations
US5850544A (en) * 1995-06-06 1998-12-15 International Business Machines Corporation System and method for efficient relational query generation and tuple-to-object translation in an object-relational gateway supporting class inheritance
US5813009A (en) * 1995-07-28 1998-09-22 Univirtual Corp. Computer based records management system method
US5732265A (en) * 1995-11-02 1998-03-24 Microsoft Corporation Storage optimizing encoder and method
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US5826265A (en) * 1996-12-06 1998-10-20 International Business Machines Corporation Data management system having shared libraries
US6026237A (en) * 1997-11-03 2000-02-15 International Business Machines Corporation System and method for dynamic modification of class files
US6286051B1 (en) * 1997-11-12 2001-09-04 International Business Machines Corporation Method and apparatus for extending a java archive file
US6047318A (en) * 1997-11-19 2000-04-04 International Business Machines Corporation Method of downloading java bean files in a network
US6349344B1 (en) * 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
US6260187B1 (en) * 1998-08-20 2001-07-10 Wily Technology, Inc. System for modifying object oriented code
US6446084B1 (en) * 1998-09-22 2002-09-03 Sun Microsystems, Inc. Optimizing symbol table lookups in platform-independent virtual machines
US6336122B1 (en) * 1998-10-15 2002-01-01 International Business Machines Corporation Object oriented class archive file maker and method
GB2343021A (en) * 1998-10-19 2000-04-26 Ibm Class loading model for object oriented programming
US6272674B1 (en) * 1998-12-14 2001-08-07 Nortel Networks Limited Method and apparatus for loading a Java application program

Also Published As

Publication number Publication date
KR100562398B1 (ko) 2006-12-01
EP0913769B1 (de) 2006-04-05
US6530080B2 (en) 2003-03-04
US5966702A (en) 1999-10-12
EP0913769A2 (de) 1999-05-06
KR19990037560A (ko) 1999-05-25
DE69834087D1 (de) 2006-05-18
EP0913769A3 (de) 1999-12-01
US20030009743A1 (en) 2003-01-09
JP2000029706A (ja) 2000-01-28

Similar Documents

Publication Publication Date Title
DE69834087T2 (de) Verfahren und Gerät zur Vorverarbeitung und Verpackung von Klassendateien
DE60035745T2 (de) Verfahren zum bei Bedarf Laden und Ausführen einer Netzwerkanwendung
DE69919384T2 (de) Verfahren und vorrichtung zur automatischen optimierung der ausführung eines rechnerprogramms
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
EP1393184B1 (de) Vorrichtung und verfahren zum ermitteln einer physikalischen adresse aus einer virtuellen adresse unter verwendung einer hierarchischen abbildungsvorschrift mit komprimierten knoten
DE60031370T2 (de) Tokenbasierte verknüpfung
DE69734175T2 (de) Transportunabhängige Anruf- und Dienstschnittstellen, die die Marshalling von integrierten Type-Codes sowie kompilierten Code erlauben
DE69724356T2 (de) Verfahren und Apparat für die Darstellung von Information im Bezug auf jeden einzelnen von mehreren Hyperlinks
DE69737709T2 (de) Verfahren und Vorrichtung für Informationsverarbeitung und Speicherzuordnungsanordnung
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE69533530T2 (de) Verfahren und System zur dynamischen Aggregation von Objekten
DE60126016T2 (de) Serverseitige Kontrollobjekte zur Verarbeitung von kundenseitigen Benutzerschnittstellenelementen
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE69727381T2 (de) Verfahren zum transportieren von in einer schnittstellendefinitionssprache definierten datenstrukturen zwischen heterogenen systemen
DE60208710T2 (de) Plattformunabhängige im-voraus-kompilierung
DE69827213T2 (de) Verfahren und Vorrichtung zur Erhöhung der Datenausgabe eines Geräts mit eingeschränkten Betriebsmitteln
DE69727933T2 (de) Verfahren und gerät zum beschreiben einer definierten schnittstelle, einer operation und eines datentyps in einer schnittstellendefinitionssprache
DE69835062T2 (de) Gemischter Registerstapel und Ausnahmebehandlung
DE69721632T2 (de) Verfahren und Vorrichtung zur Servletverarbeitung
DE60002295T2 (de) Aufwandslose ausnahmebehandlung
DE69814174T2 (de) Java laufzeitsystem mit veränderter sammlung von konstanten
DE19928980A1 (de) Codeerzeugung für einen Bytecode-Compiler
EP0967547A2 (de) Verfahren und Gerät zur Beschaffung eines Stroms von Bytekode und serialisierten Objekten
DE69930695T2 (de) Verfahren und Vorrichtung für ein Applikationsverteiler für eine Serverapplikation
DE60103521T2 (de) Vorladen von klassen in einer datenverarbeitungseinrichtung ohne virtueller speicherverwalter

Legal Events

Date Code Title Description
8364 No opposition during term of opposition