DE69911104T2 - Statische Bindung von dynamisch abgesendeten Anrufen in Anwesenheit von dynamischer Verknüpfung und Ladung - Google Patents

Statische Bindung von dynamisch abgesendeten Anrufen in Anwesenheit von dynamischer Verknüpfung und Ladung Download PDF

Info

Publication number
DE69911104T2
DE69911104T2 DE69911104T DE69911104T DE69911104T2 DE 69911104 T2 DE69911104 T2 DE 69911104T2 DE 69911104 T DE69911104 T DE 69911104T DE 69911104 T DE69911104 T DE 69911104T DE 69911104 T2 DE69911104 T2 DE 69911104T2
Authority
DE
Germany
Prior art keywords
function
class
computer
compiled
runtime
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
DE69911104T
Other languages
English (en)
Other versions
DE69911104D1 (de
Inventor
Lars Palo Alto Bak
Srdjan Redwood Shores Mitrovic
Urs Palo Alto Holzle
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
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of DE69911104D1 publication Critical patent/DE69911104D1/de
Application granted granted Critical
Publication of DE69911104T2 publication Critical patent/DE69911104T2/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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising based on receiver type

Description

  • HINTERGRUND DER ERFINDUNG
  • Die vorliegende Erfindung betrifft eine Laufzeitkompilation von Software. Genauer gesagt betrifft die Erfindung Techniken zum Durchführen eines statischen Bindens von dynamisch abgesetzten Aufrufen beim Vorhandensein eines dynamischen Verbindens und Ladens.
  • Das Dokument US-A-5613120 (Silicon Graphics) zeigt ein allgemeines System und Verfahren nach dem Stand der Technik zum Kompilieren und Binden einer Quellendatei.
  • Die grundsätzliche Idee hinter objektorientierten Sprachen ist die Kombination von sowohl Daten als auch den Verfahren (oder Fraktionen), die an diesen Daten arbeiten, in eine einzige Einheit, die Objekt genannt wird. Objektfunktionen liefern typischerweise die einzige Art zum Zugreifen auf Daten, die durch das Objekt eingekapselt sind. Auf die Daten wird durch Senden einer Nachricht zum Objekt zugegriffen, was das Objekt anweist, das durch die Nachricht spezifizierte Verfahren aufzurufen.
  • Ein effizientes Absetzen einer Nachricht ist von äußerster Wichtigkeit bei objektorientierten Sprachen. Dies ist deshalb so, weil ein Absetzen von einer Nachricht eine sehr häufige Operation bei objektorientierten Programmen ist und zur Laufzeit durchgeführt wird; daher sollte es so schnell wie möglich erfolgen. Ein Absetzen einer Nachricht ist jedoch weit davon entfernt, eine triviale Operation zu sein. Ungleich von verfahrensmäßigen Programmiersprachen (z. B. der Programmiersprache C), die eine Funktionsadresse vor einer Laufzeit bestimmen können, müssen objektorientierte Sprachen das Verfahren, das eine Nachricht handhabt, die zu einem Empfängerobjekt abgesetzt worden ist, zur Laufzeit dynamisch bestimmen, und dies kann eine extensive Suche enthalten.
  • Zum besseren Verstehen der Komplexitäten eines Absetzens einer Nachricht wird ein Beispiel einer Klassenhierarchie beschrieben. 1 zeigt eine Klassenhierarchie mit Verfahren für jede Klasse. Eine Klassenhierarchie 1 enthält an ihrer Wurzel eine Elternklasse A3, die zwei virtuelle Funktionen foo() und bar() definiert. Virtuelle Funktionen sind Funktionen, die in einer Elternklasse definiert und in zugehörigen Kinderklassen neu definiert sein können. Klassen B5 und eine Klasse C7 enthalten innewohnend die Daten und Verfahren der Elternklasse A3. Wie es gezeigt ist, definiert eine Klasse B5 keine der virtuellen Funktionen foo() und bar() neu. Jedoch definiert eine Klasse C7 die virtuelle Funktion foo() neu. Wenn ein Objekt der Klasse C7 angefragt wird, das Verfahren foo() aufzurufen, wird das aufgerufene Verfahren das durch die Klasse C7 definierte Verfahren und nicht die Elternklasse A3 sein. Klassen D9 und E11 definieren auch das Verfahren foo() neu.
  • Da es allgemein unmöglich ist, die Klasse eines Objekts statisch zu bestimmen, wird die Suche nach dem richtigen Verfahren, das zu dem Objekt gehört, während einer Laufzeitausführung oder, genauer gesagt, während eines Absetzens einer Nachricht durchgeführt. Beispielsweise soll angenommen sein, dass ein Verfahren wie folgt ist:
  • Figure 00020001
  • Wenn alle Klassen A–E zur Laufzeitausführung geladen sind, wird die Bestimmung diesbezüglich, welche Funktion foo() aufzurufen ist, davon abhängen, welche Klasse x ein dringender Fall ist.
  • Weiterhin kann die Testfunktion zur Laufzeit kompiliert werden, um eine Leistungsfähigkeit zu erhöhen. Bei einer Laufzeitkompilation ist es möglich, dass nur die Klassen A3 und B5 geladen werden. Demgemäß erscheint es aus einer Untersuchung der geladenen Klassen so zu sein, dass man annehmen kann, dass die Nachricht x.foo() nur A::foo() aufrufen wird. Natürlich würde sich dann, wenn während einer Laufzeitausführung die Klasse C7 geladen wird, diese Annahme als falsch erweisen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Allgemein liefern Ausführungsbeispiele der vorliegenden Erfindung innovative Techniken zum Durchführen eines statischen Bindens von abgesetzten Aufrufen beim Vorhandensein eines dynamischen Bindens und Ladens. Gemäß einem Aspekt der vorliegenden Erfindung enthält ein Verfahren zum Erhöhen der Ausführungsleistungsfähigkeit einer Funktion zur Laufzeit ein Kompilieren der Funktion, die entweder interpretiert oder zuvor kompiliert werden kann, und ein Identifizieren eines Aufrufs innerhalb der Funktion zu einem Prozess. Das Verfahren enthält auch ein Hinzufügen bzw. Addieren einer Abhängigkeitsinformation zu der Funktion. Die Abhängigkeitsinformation ist angeordnet, um einen Status der Funktion anzuzeigen, und enthält Information, die zu der Klasse, dem Namen und der Signatur, die zu dem Prozess gehören, gehört.
  • Gemäß einem weiteren Aspekt der vorliegenden Erfindung enthält ein computerimplementiertes Verfahren zum Analysieren einer ersten Klasse, die zu einer Klassenhierarchie eines Systems während einer Laufzeit gehört, ein Markieren der ersten Klasse und ein Markieren einer zweiten Klasse, die eine Superklasse der ersten Klasse ist, um eine zugehörige zwischen den beiden Klassen anzuzeigen. Dann wird eine zum System gehörende kompilierte Funktion untersucht. Die kompilierte Funktion enthält eine Abhängigkeitsinformation, die eingerichtet ist, um einen Gültigkeitsstatus der kompilierten Funktion sowie den Optimierungsstatus der kompilierten Funktion anzuzeigen. Ein Untersuchen der kompilierten Funktion enthält ein Bestimmen, wann wenigstens eine der ersten Klasse und der zweiten Klasse in der Abhängigkeitsinformation identifiziert wird. Wenn bestimmt wird, dass entweder die erste Klasse oder sowohl die erste Klasse als auch die zweite Klasse in der Abhängigkeitsinformation identifiziert wird, wird eine Bestimmung diesbezüglich durchgeführt, ob die kompilierte Funktion ungültig ist. Bei einem Ausführungsbeispiel kann das Verfahren ein Entkompilieren der kompilierten Funktion enthalten, wenn bestimmt wird, dass die kompilierte Funktion ungültig ist. Ein Entkompilieren der kompilierten Funktion kann die Funktion zu einem interpretierten Zustand zurückbringen.
  • Andere Merkmale und Vorteile der Erfindung werden ohne weiteres beim Betrachten der folgenden detaillierten Beschreibung in Zusammenhang mit den beigefügten Zeichnungen offensichtlich werden.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Erfindung kann in spezifischen Ausführungsbeispielen durch Bezugnahme auf die folgende Beschreibung verstanden werden, genommen im Zusammenhang mit den beigefügten Zeichnungen, wobei:
  • 1 eine Klassenhierarchie von Klassen einschließlich virtueller Funktionen in einer objektorientierten Umgebung darstellt.
  • 2 ein Beispiel eines Computersystems darstellt, das zum Ausführen der Software eines Ausführungsbeispiels der Erfindung verwendet werden kann.
  • 3 ein Systemblockdiagramm des Computersystems der 1 zeigt.
  • 4 eine Diagramm-Darstellung einer virtuellen Maschine gemäß einem Ausführungsbeispiel der vorliegenden Erfindung.
  • 5 ein Ablaufdiagramm eines Ausführungsbeispiels der Erfindung darstellt, das ein Verfahren zur Laufzeit kompiliert.
  • 6 ein Ausführungsbeispiel eines kompilierten Verfahrens einschließlich einer Abhängigkeitsinformation zeigt.
  • 7 ein Ablaufdiagramm eines Prozesses eines Ladens einer Klasse während einer Laufzeitausführung gemäß einem Ausführungsbeispiel der vorliegenden Erfindung darstellt.
  • 8 eine Darstellung einer Klassenhierarchie in einem Speicher gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zeigt.
  • DETAILLIERTE BESCHREIBUNG BEVORZUGTER AUSFÜHRUNGSBEISPIELE
  • Definitionen
  • Maschinenanweisung (oder Anweisung) – Eine Anweisung, die eine Rechenvorrichtung dirigiert, eine Operation durchzuführen, die durch einen Operationscode (OP-Code), und optional durch einen oder mehrere Operanden, spezifiziert ist.
  • Virtuelle Maschinenanweisung – Eine Anweisung für einen mittels Software emulierten Mikroprozessor oder eine Computerarchitektur (auch virtueller Code genannt).
  • Maschinenspezifische Anweisung – Eine Anweisung, die für einen spezifischen Mikroprozessor oder eine spezifische Computerarchitektur entwickelt ist (auch maschinenspezifischer Code genannt).
  • Verfahren bzw. Methode – Eine Softwareroutine (die auch Funktion, Unterroutine bzw. Unterprogramm, Prozedur und Teilnehmerfunktion genannt wird).
  • Laufzeitkompilation – Kompilation eines Codes, die zur Laufzeit durchgeführt wird.
  • Laufzeitausführung – Ausführung eines Codes, die zur Laufzeit durchgeführt wird.
  • Detaillierte Beschreibung
  • In der Beschreibung, die folgt, wird die vorliegende Erfindung unter Bezugnahme auf bevorzugte Ausführungsbeispiele beschrieben, die dynamisch abgesetzte Aufrufe in virtuellen JAVA-Maschinenanweisungen (oder Bytecodes) statisch binden. Jedoch ist die Erfindung nicht auf irgendeine bestimmte Sprache, eine bestimmte Computerarchitektur oder eine spezifische Implementierung beschränkt. Daher dient die Beschreibung der Ausführungsbeispiele, die folgen, zu Zwecken einer Darstellung und nicht zur Beschränkung.
  • Die JAVATM-Programmiersprache ist eine objektorientierte problemorientierte Programmiersprache, die von Sun Microsystems entwickelt und entworfen ist, um ausreichend portierbar zu sein, um in einem weiten Bereich von Computern ausgeführt zu werden, der von kleinen Vorrichtungen (z. B. Pager, Zellulartelefonen bzw. Mobilfunktelefonen und Smartcards bzw. Chip-Karten) bis zu Supercomputern reicht. Computerprogramme, die in JAVA (und anderen Sprachen) geschrieben sind, können zur Ausführung durch eine virtuelle JAVA-Maschine in virtuelle Maschinenanweisungen kompiliert werden. Allgemein ist die virtuelle JAVA-Maschine ein Interpretierer, der die virtuellen Maschinenanweisungen decodiert und ausführt.
  • Die virtuellen Maschinenanweisungen für die virtuelle JAVA-Maschine sind Bytecodes, was bedeutet, dass sie eines oder mehrere Bytes enthalten. Die Bytecodes werden in einem bestimmten Dateienformat gespeichert, das "Klassendatei" genannt wird, die Bytecodes für Verfahren einer Klasse enthält. Zusätzlich zu den Bytecodes für Verfahren einer Klasse enthält die Klassendatei eine Symboltabelle sowie andere Hilfsinformationen.
  • Ein Computerprogramm, das als JAVA-Bytecodes in einer oder mehreren Klassendateien verkörpert ist, ist plattformunabhängig. Das Computerprogramm kann unmodifiziert auf irgendeinem Computer ausgeführt werden, der dazu fähig ist, eine Implementierung der virtuellen JAVA-Maschine laufen zu lassen. Die virtuelle JAVA-Maschine ist ein Software-Emulator eines "allgemeinen" Computers, der ein Hauptfaktor dabei ist, zuzulassen, dass Computerprogramme für die virtuelle JAVA-Maschine plattformunabhängig sind.
  • Die virtuelle JAVA-Maschine kann als Software-Interpretierer implementiert sein. Herkömmliche Interpretierer decodieren die virtuellen Maschinenanweisungen eines interpretierten Programms mit einer Anweisung zu einer Zeit während einer Ausführung und führen sie aus, was gegensätzlich zu Kompilierern ist, die einen Quellencode vor einer Ausführung in maschinenabhängige Anweisungen decodieren, so dass während einer Ausführung kein Decodieren durchgeführt wird. Die virtuelle JAVA-Maschine kann sowohl einen Interpretierer als auch einen Kompilierer für eine Laufzeitkompilation enthalten. Typischerweise wird die virtuelle JAVA-Maschine in einer Programmiersprache geschrieben sein, die eine andere als die JAVA-Programmiersprache ist (z. B. die Programmiersprache C++).
  • 2 stellt ein Beispiel eines Computersystems dar, das dazu verwendet werden kann, die Software eines Ausführungsbeispiels der Erfindung auszuführen. 2 zeigt ein Computersystem 301, das eine Anzeige 303, einen Bildschirm 305, ein Gehäuse 307, eine Tastatur 309 und eine Maus 311 enthält. Die Maus 311 kann eine oder mehrere Tasten zum Interagieren mit einer graphischen Anwenderschnittstelle haben. Das Gehäuse 307 umgibt ein CD-ROM-Laufwerk 313, einen Systemspeicher und ein Festplattenlaufwerk (siehe 3), die dazu verwendet werden können, Softwareprogramme zu speichern und wiederzugewinnen, die einen Computercode, der die Erfindung implementiert, Daten zur Verwendung mit der Erfindung und ähnliches enthalten. Obwohl der CD-ROM 315 als beispielhaftes computerlesbares Speichermedium gezeigt ist, können andere computerlesbare Speichermedien einschließlich einer Floppy-Disk, eines Bandes, eines Flash-Speichers, eines Systemspeichers und eines Festplattenlaufwerks verwendet werden. Zusätzlich kann ein Datensignal, das in einer Trägerwelle verkörpert ist (z. B. in einem Netzwerk einschließlich des Internets) das computerlesbare Speichermedium sein.
  • 3 zeigt ein System-Blockdiagramm eines Computersystems 301, das dazu verwendet wird, die Software eines Ausführungsführungsbeispiels der Erfindung auszuführen. Wie in 2 enthält das Computersystem 301 einen Monitor 303 und eine Tastatur 309 und eine Maus 311. Das Computersystem 301 enthält weiterhin Untersysteme, wie beispielsweise einen Zentralprozessor 351, einen Systemspeicher 353, einen festen Speicher 355 (z. B. ein Festplattenlaufwerk), einen entfernbaren Speicher 357 (z. B. ein CD-ROM-Laufwerk), einen Anzeigenadapter 359, eine Klangkarte bzw. Soundkarte 361, Lautsprecher 363 und eine Netzwerkschnittstelle 365. Andere Computersysteme, die zur Verwendung bei der Erfindung geeignet sind, können zusätzliche oder weniger Untersysteme enthalten. Beispielsweise könnte ein weiteres Computersystem mehr als einen Prozessor 351 (d. h. ein Mehrfachprozessorsystem) oder einen Cache-Speicher enthalten.
  • Die Systembusarchitektur des Computersystems 301 ist durch Pfeile 367 dargestellt. Jedoch sind diese Pfeile für irgendein Verbindungsschema illustrativ, das zum Verbinden der Untersysteme dient. Beispielsweise könnte ein lokaler Bus dazu verwendet werden, den Zentralprozessor mit dem Systemspeicher und dem Anzeigenadapter zu verbinden. Das in 3 gezeigte Computersystem 301 ist aber ein Beispiel eines Computersystems, das zur Verwendung bei der Erfindung geeignet ist. Andere Computerarchitekturen mit anderen Konfigurationen von Untersystemen können auch verwendet werden.
  • Typischerweise werden in der JAVA-Programmiersprache geschriebene Computerprogramme in Bytecodes oder virtuelle JAVA-Maschinenanweisungen kompiliert, die dann durch eine virtuelle JAVA-Maschine ausgeführt werden. Die Bytecodes werden in Klassendateien gespeichert, die zur Interpretation in die virtuelle JAVA-Maschine eingegeben werden. Eine virtuelle Maschine kann auf einem Computersystem, wie beispielsweise dem zuvor unter Bezugnahme auf die 2 und 3 diskutierten Computersystem, ausführen. 4 ist eine Diagramm-Darstellung einer virtuellen Maschine, die durch das Computersystem 301 der 2 und 3 unterstützt wird, und ist zum Implementieren der vorliegenden Erfindung geeignet. Wenn ein Computerprogramm, z. B. ein in der JAVATM-Programmiersprache geschriebenes Computerprogramm, ausgeführt wird, wird ein Quellencode 410 zu einem Compiler bzw. Kompilierer 420 innerhalb einer Kompilierzeitumgebung 405 geliefert. Der Kompilierer 420 setzt den Quellencode 410 in Bytecodes 430 um. Allgemein wird der Quellencode 410 zu der Zeit in Bytecodes 430 übersetzt, zu welcher der Quellencode 410 durch einen Software-Entwickler erzeugt wird.
  • Bytecodes 430 können allgemein über ein Netzwerk, z. B. die Netzwerkschnittstelle 365 der 3, reproduziert, heruntergeladen oder auf andere Weise verteilt werden, oder in einer Speichervorrichtung, wie beispielsweise der Speichervorrichtung 355 der 3, gespeichert werden. Bei dem beschriebenen Ausführungsbeispiel sind die Bytecodes 430 plattformunabhängig. Das bedeutet, dass die Bytecodes 430 auf im Wesentlichen irgendeinem Computersystem ausgeführt werden können, das auf einer geeigneten virtuellen Maschine 440 läuft.
  • Die Bytecodes 430 werden zu einer Laufzeitumgebung 435 geliefert, die eine virtuelle Maschine 440 enthält. Bei einem Ausführungsbeispiel kann die virtuelle Maschine eine virtuelle JAVATM-Maschine sein. Die Laufzeitumgebung 435 kann allgemein unter Verwendung eines Prozessors oder von Prozessoren, wie beispielsweise dem Prozessor 351 der 3, ausgeführt werden. Die virtuelle Maschine 440 enthält einen Kompilierer 442, einen Interpretierer 444 und ein Laufzeitsystem 446. Die Bytecodes 430 können entweder zum Kompilierer 442 oder zum Interpretierer 444 geliefert werden.
  • Wenn die Bytecodes 430 zum Kompilierer 442 geliefert werden, werden in den Bytecodes 430 enthaltene Verfahren in Maschinenanweisungen kompiliert. Bei einem Ausführungsbeispiel ist der Kompilierer 442 ein Kompilierer genau für eine Zeit, der die Kompilation von Verfahren verzögert, die in den Bytecodes 430 enthalten ist, bis die Verfahren dabei sind, ausgeführt zu werden. Wenn die Bytecodes 430 zum Interpretierer 444 geliefert werden, werden die Bytecodes 430 mit einem Bytecode zu einer Zeit in den Interpretierer 444 gelesen. Der Interpretierer 444 führt dann die durch einen jeweiligen Bytecode definierte Operation durch, wenn jedes Bytecode in den Interpretierer 444 gelesen ist. Das bedeutet, dass der Interpretierer 444 die Bytecodes 430 "interpretiert", wie es von Fachleuten auf dem Gebiet erkannt werden wird. Allgemein verarbeitet der Interpretierer 444 die Bytecodes 430 und führt Operationen durch, die zu den Bytecodes 430 gehören, und zwar im Wesentlichen kontinuierlich.
  • Wenn ein Verfahren durch ein anderes Verfahren aufgerufen wird oder von der Laufzeitumgebung 435 aufgerufen wird, wenn das Verfahren interpretiert ist, kann das Laufzeitsystem 446 das Verfahren von der Laufzeitumgebung 435 in der Form einer Sequenz von Bytecodes 430 erhalten, welche durch den Interpretierer 444 direkt ausgeführt werden können. Wenn andererseits das Verfahren, das aufgerufen wird, ein kompiliertes Verfahren ist, das nicht kompiliert worden ist, erhält das Laufzeitsystem 446 auch das Verfahren von der Laufzeitumgebung 435 in der Form einer Sequenz von Bytecodes 430, und kann dann dazu übergehen, den Kompilierer 442 zu aktivieren. Der Kompilierer 442 erzeugt dann Maschinenanweisungen aus den Bytecodes 430, und die resultierenden Maschinensprachenanweisungen können durch den Prozessor 351 der 3 direkt ausgeführt werden. Allgemein werden die Maschinensprachenanweisungen weggeworfen, wenn die virtuelle Maschine 440 beendet.
  • JAVA-Klassen (und -Schnittstellen) werden dynamisch geladen, gebunden und initialisiert. Ein Laden ist der Prozess des Systems, der die binäre Form der Klasse (z. B. die Klassendatei) findet und aus der binären Form ein Klassenobjekt bildet, um die Klasse darzustellen. Die Klassenklasse ist eine Klasse zum Speichern oder Darstellen der Strukturen von Klassen. Ein Binden ist der Prozess zum Annehmen einer binären Form der Klasse und zum Kombinieren von ihr in den Laufzeitzustand des Systems, so dass sie ausgeführt werden kann. Eine Initialisierung einer Klasse enthält ein Ausführen der statischen Initialisierer der Klasse und der Initialisierer für statische Felder, die in der Klasse erklärt sind.
  • Jede JAVA-Klasse hat einen konstanten Pool, der ihr zugeordnet ist. Der konstante Pool ist in der JAVA-Klassendatei gespeichert und dient als Funktion, die gleich Symboltabellen ist. Typischerweise wird jeder Eintrag im konstanten Pool durch eine Zahl indiziert, die mit Eins beginnt und mit der Zahl von Einträgen im konstanten Pool endet. Ein Verfahren für Klassenzugriffe tritt in den konstanten Pool durch den Index ein, und ein Verfahren für eine Klasse kann für eine andere Klasse nicht auf einen konstanten Pool zugreifen.
  • Zusätzlich zu dem konstanten Pool, der literale Konstanten speichert, speichert der konstante Pool Klassen, Verfahren, Felder und Schnittstellen symbolisch. Mit einem symbolischen Speichern dieser Einträge ist gemeint, dass der Name, der den Eintrag identifiziert, gespeichert wird, und nicht die physikalische Adresse. Anders ausgedrückt können dann, wenn eine Klasse A ein Feld F hat, beide Namen von A und F (zusammen mit einer Typensignatur für F) im konstanten Pool gespeichert werden. Durch Speichern von Namen und nicht von Adressen löst das JAVA-Laufzeitsystem die symbolische Referenz in eine physikalische Adresse zur Laufzeit dynamisch auf.
  • 5 stellt ein Ablaufdiagramm eines Ausführungsbeispiels der Erfindung dar, das ein Verfahren zur Laufzeit kompiliert. Bei einem Schritt 501 bestimmt das System, dass es vorteilhaft ist, ein Verfahren zu kompilieren. Allgemein erhöht ein Kompilieren eines Verfahrens die Ausführungsleistung des Verfahrens. Jedoch gibt es viele Fälle, in welchen Verfahren nicht kompiliert werden. Beispielsweise können kompilierte Verfahren mehr Speicherplatz als Verfahren, die nicht kompiliert sind, erfordern. In jedem Fall wird dann, wenn einmal bestimmt wird, dass ein bestimmtes Verfahren kompiliert werden sollte, dieses Verfahren bei einem Schritt 503 kompiliert.
  • Bei einem Schritt 505 identifiziert das System einen Aufruf zu einer virtuellen Funktion in dem Verfahren, das kompiliert wird. Wie es oben diskutiert ist, wird eine Auflösung eines Aufrufs einer virtuellen Funktion dynamisch zur Laufzeit durchgeführt. Bei den virtuellen JAVA-Maschinenanweisungen ist der Aufruf eine virtuelle Aufrufanweisung.
  • Das System analysiert die Klassenhierarchie zur Laufzeitkompiliation bei einem Schritt 507. Die Klassenhierarchie kann diese gegenwärtig nur eine Funktion einer geladenen Klasse anzeigen, die der Empfänger des Aufrufs der virtuellen Funktion sein würde. Wenn nur eine Funktion der geladenen Klasse der Empfänger des Aufrufs für die virtuelle Funktion sein würde, kann das System einen direkten Aufruf zu dieser Funktion im kompilierten Verfahren absetzen. Zusätzlich kann das System die gesamte Funktion in das kompilierte Verfahren einreihen. Ein Einreihen der gesamten Funktion erfordert mehr Speicherraum für das kompilierte Verfahren, resultiert aber in einer schnelleren Durchführbarkeit.
  • In einigen Fällen gibt es mehr als eine Funktion von geladenen Klassen, die der Empfänger des Aufrufs für eine virtuelle Funktion sein könnten. Wenn dies der Fall ist, kann das System einen Entscheidungsbaum oder eine Hash-Tabelle einreihen, die direkte Aufrufe zu den Funktionen enthält, und/oder Funktionen einreihen. Das bedeutet, dass der Aufruf zu der virtuellen Funktion, wie es in Bezug auf den Schritt 505 diskutiert ist, bei einem Schritt 909 optimiert werden kann. Techniken zum Durchführen von Aufrufen für eine virtuelle Funktion sind in der Anmeldung Nr. 08/944,332, eingereicht am 06. Oktober 1997, beschrieben.
  • Bei einem Schritt 511 fügt das System eine Abhängigkeitsinformation zum kompilierten Verfahren hinzu. Die Abhängigkeitsinformation kann die Klasse, den Funktionsnamen und eine Signatur (d. h. Parametertypen) einer jeweiligen virtuellen Funktion enthalten, die beim Schritt 509 optimiert worden ist. Auf diese Weise kann dann, wenn Klassen zur Laufzeitausführung geladen werden, die Abhängigkeitsinformation für ein kompiliertes Verfahren geprüft werden, um zu bestimmen, ob das kompilierte Verfahren noch gültig ist, deoptimiert werden sollte oder neu optimiert werden sollte. Dieser Prozess wird nachfolgend unter Bezugnahme auf 7 detaillierter beschrieben.
  • 6 zeigt ein Ausführungsbeispiel eines kompilierten Verfahrens mit einer Abhängigkeitsinformation. Ein kompiliertes Verfahren 609 enthält einen Anfangsblock 603 und einen kompilierten Code 605. Der Anfangsblock 603 enthält u. a. eine Abhängigkeitsinformation 607. Die Abhängigkeitsinformation 607 ist beim beschriebenen Ausführungsbeispiel eine Liste aus der Klasse, dem Namen und der Signatur von allen Aufrufen für eine virtuelle Funktion, die im kompilierten Verfahren 609 optimiert wurden. Obwohl diese Information als einfache Liste gespeichert werden kann, kann eine Vielfalt von anderen Speichertechniken verwendet werden.
  • 7 stellt ein Ablaufdiagramm eines Prozesses eines Ladens einer Klasse während einer Laufzeitausführung dar. Bei einem Schritt 701 empfängt das System eine zur Laufzeit zu ladende Klasse. Das System markiert dann die Klasse und alle ihre Unterklassen bei einem Schritt 703. Die Klassen können durch Einstellen eines Bool'schen Felds in einer Klassenhierarchiestruktur (siehe 8) markiert werden.
  • Bei einem Schritt 705 untersucht das System alle kompilierten Verfahren, um zu bestimmen, ob sie irgendeine der markierten Klassen in ihrer Abhängigkeitsinformation enthalten. Wie es oben diskutiert ist, kann die Abhängigkeitsinformation in einem Anfangsblock des kompilierten Verfahren gespeichert sein. Wenn irgendeine der markierten Klassen in einer Abhängigkeitsinformation des kompilierten Verfahrens enthalten ist, bestimmt das System, ob es einen Funktionsnamen und eine Signaturanpassung gibt, bei einem Schritt 707.
  • Durch Bestimmen, ob es einen Funktionsnamen und eine Signaturanpassung gibt, stellt das System fest, ob ein Laden der Klasse veranlasst, dass irgendeines der kompilierten Verfahren effektiv für ungültig erklärt wird. Anders ausgedrückt bestimmt die Bestimmung diesbezüglich, dass es einen Funktionsnamen und eine Signaturanpassung gibt, ob ein Laden der Klasse einen neuen und zuvor nicht berücksichtigten Empfänger für einen Aufruf für eine virtuelle Funktion, der optimiert worden ist, erzeugt.
  • Nimmt man wiederum Bezug auf 1 kann beispielsweise dann, wenn nur Klassen A3 und B5 zur Laufzeitkompilation geladen werden, das System einen direkten Aufruf zu A::foo() (oder sogar die gesamte Funktion einreihen) in einem kompilierten Verfahren anordnen, da es nur eine Funktion gibt, die der Empfänger des Aufrufs für die virtuelle Funktion sein könnte. Jedoch dann, wenn während einer Laufzeitausführung eine Klasse C7 geladen wird, gibt es einen weiteren möglichen Empfänger für den Aufruf für eine virtuelle Funktion (d. h. C::foo()). Somit sollte das kompilierte Verfahren entweder deoptimiert oder neu optimiert werden. Techniken zur Deoptimierung von kompilierten Verfahren sind in der Anmeldung Nr. 08/944,330, eingereicht am 06. Oktober 1997, beschrieben.
  • Wenn es beim Schritt 707 eine Anpassung für ein kompiliertes Verfahren gibt, kann das kompilierte Verfahren bei einem Schritt 709 deoptimiert werden. Ein Deoptimieren des kompilierten Verfahrens kann ein Umkehren oder auf andere Weise ein "Entkompilieren" des Verfahrens in seine interpretierte Form enthalten. Zusätzlich kann das System das kompilierte Verfahren so neu optimieren, dass es nun die neu geladene Klasse berücksichtigt.
  • 8 zeigt eine Darstellung einer Klassenhierarchie in einem Speicher. Eine Klasse 801 ist bei der Wurzel gezeigt, die anzeigt, dass sie eine Superklasse für Klassen unter ihr ist. Wie es gezeigt ist, sind Klassen 803 und 805 Unterklassen der Klasse 801. Die Klasseninformation für jede Klasse kann ein Bool'sches Feld enthalten, das dazu verwendet wird, die Klassen zu markieren, und zwar wie im Schritt 703 der 7.
  • Zusätzlich kann die Klasseninformation für jede Klasse einen Unterklassenzeiger und einen Nachkommenschaftszeiger enthalten. Der Unterklassenzeiger zeigt zu einer ersten Unterklasse, die bei diesem Beispiel die Klasse 803 ist. Der Nachkommenschaftszeiger bildet eine verbundene Liste der Klassen, die Nachkommenschaften sind. Wie es gezeigt ist, zeigt der Nachkommenschaftszeiger der Klasse 803 zur Klasse 805. Unter Verwendung der Unterklassen- und Nachkommenschaftszeiger kann das System bei einem Ausführungsbeispiel der Erfindung auf einfache Weise die Klassenhierarchie durchqueren.
  • Schluss
  • Während das obige eine vollständige Beschreibung bevorzugter Ausführungsbeispiele der Erfindung ist, können verschiedene Alternativen, Modifikationen und Äquivalente verwendet werden. Es sollte offensichtlich sein, dass die Erfindung gleichermaßen durch Durchführen geeigneter Modifikationen an den oben beschriebenen Ausführungsbeispielen anwendbar ist. Beispielsweise können, obwohl die beschriebenen Ausführungsbeispiele unter Bezugnahme auf virtuelle JAVA-Maschinenanweisungen erfolgt sind, die Prinzipien der vorliegenden Erfindung ohne weiteres auf andere Anweisungen angewendet werden. Daher sollte die obige Beschreibung nicht als den Schutzumfang der Erfindung beschränkend angenommen werden.

Claims (31)

  1. Computerimplementiertes Verfahren zum Erhöhen der Ausführungsleistung einer Funktion zur Laufzeit, wobei das computerimplementierte Verfahren folgendes aufweist: Kompilieren der Funktion; Identifizieren eines Aufrufs zu einem Prozess zu einer Laufzeit, wobei der Aufruf zum Prozess in der Funktion enthalten ist; und Hinzufügen von Abhängigkeitsinformation zu der Funktion zur Laufzeit, wobei die Abhängigkeitsinformation eingerichtet ist, um einen Status der Funktion anzuzeigen, wobei der Status der Funktion eingerichtet ist, um eine Gültigkeit der Funktion und einen Kompilationsstatus der Funktion anzuzeigen.
  2. Computerimplementiertes Verfahren nach Anspruch 1, wobei die Abhängigkeitsinformation Klasseninformation, Nameninformation und Signaturinformation enthält, die dem Prozess zugeordnet sind.
  3. Computerimplementiertes Verfahren nach Anspruch 1, wobei der Prozess ein virtueller Prozess ist, wobei das computerimplementierte Verfahren weiterhin folgendes enthält: Analysieren einer Klassenstruktur, die zu der Funktion gehört, wobei ein Analysieren der Klassenstruktur ein Bestimmen enthält, wann der virtuelle Prozess ein im Wesentlichen eindeutiges Ziel des Aufrufs ist.
  4. Computerimplementiertes Verfahren nach Anspruch 3, wobei das computerimplementierte Verfahren weiterhin folgendes enthält: Einreihen des virtuellen Prozesses in die Funktion, wenn bestimmt wird, dass der virtuelle Prozess das im Wesentlichen eindeutige Ziel des Aufrufs ist.
  5. Computerimplementiertes Verfahren nach Anspruch 3, wobei das computerimplementierte Verfahren weiterhin folgendes enthält: Platzieren eines direkten Aufrufs zum virtuellen Prozess in der Funktion.
  6. Computerimplementiertes Verfahren nach einem der vorangehenden Ansprüche, das weiterhin folgendes enthält: Bestimmen, wann die Funktion zur Kompilation geeignet ist.
  7. Computerimplementiertes Verfahren nach einem der vorangehenden Ansprüche, das weiterhin folgendes enthält: Laden einer Klasse, wobei die Klasse potentiell der kompilierten Funktion zugeordnet ist; und Bestimmen, ob die kompilierte Version der Funktion gültig bleibt, nachdem die Klasse geladen ist, basierend auf der Abhängigkeitsinformation; und wenn bestimmt ist, dass die kompilierte Version der Funktion ungültig ist, Bestimmen von wenigstens einem davon, ob die Funktion zur Deoptimierung geeignet ist, und ob die Funktion zur Neuoptimierung geeignet ist.
  8. Computerimplementiertes Verfahren nach Anspruch 1, das weiterhin folgendes aufweist: Laden einer Klasse, die der Funktion zugeordnet bzw. zugehörig ist; Bestimmen, wann die Funktion nicht ein im Wesentlichen eindeutiger Aufrufer zu dem Prozess ist; und Entkompilieren der Funktion, wenn bestimmt wird, dass die Funktion nicht ein im Wesentlichen eindeutiger Aufrufer zum Prozess ist.
  9. Computerimplementiertes Verfahren nach Anspruch 1, das weiterhin folgendes aufweist: Laden einer Klasse, die zu der Funktion gehört; Bestimmen, wann die Funktion nicht ein im Wesentlichen eindeutiger Aufrufer zum Prozess ist; erneutes Kompilieren der Funktion, wenn bestimmt wird, dass die Funktion nicht ein im Wesentlichen eindeutiger Aufrufer zum Prozess ist.
  10. Computerimplementiertes Verfahren nach Anspruch 1, das weiterhin folgendes aufweist: Markieren der ersten Klasse, die zu einer Klassenhierarchie gehört; Markieren einer zweiten Klasse, wobei die zweite Klasse in der Klassenhierarchie enthalten ist, wobei die Klasse weiterhin zu der ersten Klasse gehört, wobei das Markieren der zweiten Klasse im Wesentlichen die zweite Klasse derart identifiziert, dass sie zu der ersten Klasse gehört; Untersuchen einer kompilierten Funktion einschließlich der hinzugefügten Abhängigkeitsinformation, um zu bestimmen, ob wenigstens eine der ersten und der zweiten Klasse in der Abhängigkeitsinformation identifiziert ist; und Bestimmen, dass die kompilierte Funktion ungültig ist, wenn das Untersuchen bestimmt, dass wenigstens eine der ersten und der zweiten Klasse in der Abhängigkeitsinformation identifiziert ist.
  11. Computerimplementiertes Verfahren nach Anspruch 10, das weiterhin folgendes enthält: Entkompilieren der kompilierten Funktion, wenn bestimmt wird, dass die kompilierte Funktion ungültig ist, wobei ein Entkompilieren der kompilierten Funktion die kompilierte Funktion effektiv in eine interpretierte Form versetzt.
  12. Computerimplementiertes Verfahren nach Anspruch 10, das weiterhin folgendes enthält: erneutes Kompilieren der kompilierten Funktion, wenn bestimmt wird, dass die kompilierte Funktion ungültig ist, wobei ein erneutes Kompilieren der kompilierten Funktion zulässt, dass die kompilierte Funktion zu der ersten Klasse zählt.
  13. Rechensystem bzw. Computersystem, das zum Erhöhen der Ausführungsleistung einer Funktion zur Laufzeit geeignet ist, wobei das Rechensystem folgendes aufweist: einen Prozessor; einen Kompilierer, der eingerichtet ist, die Funktion zur Laufzeit zu kompilieren; einen Aufrufidentifizierer, der eingerichtet ist, einen Aufruf zu einem Prozess zur Laufzeit zu identifizieren, wobei der Aufruf zum Prozess in der Funktion enthalten ist; und einen Mechanismus, der zum Hinzufügen von Abhängigkeitsinformation zu der Funktion zur Laufzeit geeignet ist, wobei die Abhängigkeitsinformation eingerichtet ist, einen Status der Funktion anzuzeigen, wobei der Status eingerichtet ist, eine Gültigkeit der Funktion und einen Kompilationsstatus der Funktion zu enthalten.
  14. Rechensystem nach Anspruch 13, wobei der Prozess ein virtueller Prozess ist, wobei das Rechensystem weiterhin folgendes enthält: einen Analysator zum Analysieren einer Klassenstruktur, die zu der Funktion gehört, wobei ein Analysieren der Klassenstruktur ein Bestimmen enthält, wann der virtuelle Prozess ein im Wesentlichen eindeutiges Ziel des Aufrufs ist.
  15. Rechensystem nach Anspruch 14, wobei das Rechensystem bzw. Computersystem weiterhin folgendes enthält: einen Aufreiher, der zum Aufreihen des virtuellen Prozesses in die Funktion eingerichtet ist, wenn bestimmt wird, dass der virtuelle Prozess das im Wesentlichen eindeutige Ziel des Aufrufs ist.
  16. Computerlesbares Medium mit einem Code zum Erhöhen der Ausführungsleistung einer Funktion zu einer Laufzeit, wobei das computerlesbare Medium folgendes aufweist: einen Computercode, der die Funktion kompiliert; einen Computercode, der einen Aufruf zu einem Prozess zu einer Laufzeit identifiziert, wobei der Aufruf zum Prozess in der Funktion enthalten ist; einen Computercode, der eine Abhängigkeitsinformation zu der Funktion zu einer Laufzeit hinzufügt, wobei die Abhängigkeitsinformation eingerichtet ist, einen Status der Funktion anzuzeigen, wobei der Status eingerichtet ist, eine Gültigkeit der Funktion und einen Kompilationsstatus der Funktion zu enthalten; und ein computerlesbares Medium, das die Computercodes speichert.
  17. Computerlesbares Medium nach Anspruch 16, wobei der Prozess ein virtueller Prozess ist, wobei das computerlesbare Medium weiterhin folgendes enthält: einen Computercode, der eine Klassenstruktur analysiert, die zu der Funktion gehört, wobei ein Analysieren der Klassenstruktur ein Bestimmen enthält, wenn der virtuelle Prozess ein im Wesentlichen eindeutiges Ziel des Aufrufs ist.
  18. Computerlesbares Medium nach Anspruch 17, das weiterhin folgendes enthält: einen Computercode, der den virtuellen Prozess in die Funktion einreiht, wenn bestimmt wird, dass der virtuelle Prozess das im Wesentlichen eindeutige Ziel des Aufrufs ist.
  19. Computerlesbares Medium nach Anspruch 17, wobei das computerlesbare Medium weiterhin folgendes enthält: einen Computercode, der einen direkten Aufruf zum virtuellen Prozess in der Funktion anordnet.
  20. Computerlesbares Medium nach Anspruch 17, das weiterhin folgendes enthält: einen Computercode, der bestimmt, wenn die Funktion zur Kompilation geeignet ist.
  21. Computerlesbares Medium nach einem der Ansprüche 16 bis 20, das weiterhin folgendes enthält: einen Computercode, der eingerichtet ist, eine neue Klasse zu laden; und einen Computercode, der bestimmt, ob die kompilierte Version der Funktion gültig bleibt, nachdem eine neue Klasse geladen ist, basierend auf der Abhängigkeitsinformation, und zum Bestimmen, ob die Funktion für wenigstens eines einer Deoptimierung und einer Neuoptimierung geeignet ist, wenn bestimmt wird, dass die kompilierte Version der Funktion ungültig ist.
  22. Computerlesbares Medium nach Anspruch 16, wobei das computerlesbare Medium ein ausgewähltes aus der Gruppe ist, die aus einer Floppy-Disk, einem Festplattenlaufwerk, einem Band, einem in einer Trägerwelle verkörperten Datensignal, einer CD-ROM, einem Systemspeicher und einem Flash-Speicher besteht.
  23. Datenstruktur zur Verwendung in einer Rechenumgebung zum Erhöhen der Ausführungsleistung einer Funktion zu einer Laufzeit, wobei die Datenstruktur folgendes enthält: einen kompilierten Codeteil, der eingerichtet ist, einen Aufruf zu einem Prozess zu einer Laufzeit zu identifizieren, wobei der Aufbau zum Prozess in der Funktion enthalten ist; einen Anfangsblockteil, wobei der Anfangsblockteil eingerichtet ist, eine Abhängigkeitsinformation zu enthalten, wobei die Abhängigkeitsinformation eingerichtet ist, einen Status der Funktion anzuzeigen, wobei der Status eingerichtet ist, einen Gültigkeitsstatus der Funktion und einen Kompilationsstatus der Funktion zu enthalten.
  24. Datenstruktur nach Anspruch 23, wobei die Abhängigkeitsinformation Information in Bezug auf eine Klasse enthält, die zu der wenigstens einen virtuellen Funktion gehört, eine Information in Bezug auf einen Namen von der wenigstens einen virtuellen Funktion und Information in Bezug auf eine Signatur von der wenigstens einen virtuellen Funktion.
  25. Computerimplementiertes Verfahren nach Anspruch 1, das weiterhin folgendes enthält: Laden einer Klasse, wobei die Klasse zu der Funktion zugeordnet ist; und Bestimmen, wenn die Abhängigkeitsinformation anzeigt, dass die Funktion gültig ist, dass die Funktion zur Deoptimierung geeignet ist, oder dass die Funktion zur Neuoptimierung geeignet ist.
  26. Computerlesbares Medium nach Anspruch 16, das weiterhin folgendes enthält: einen Computercode, der eine Klasse lädt, wobei die Klasse zu der Funktion zugeordnet ist; und einen Computercode, der bestimmt, wenn die Abhängigkeitsinformation anzeigt, dass die Funktion gültig ist, dass die Funktion zur Deoptimierung geeignet ist oder dass die Funktion zur Neuoptimierung geeignet ist.
  27. Computerimplementiertes Verfahren nach Anspruch 1, das weiterhin folgendes enthält: Laden einer Klasse, wobei die Klasse potentiell zu der kompilierten Funktion zugeordnet ist; und Bestimmen, ob die Funktion zur Deoptimierung oder Neuoptimierung geeignet ist.
  28. Computerimplementiertes Verfahren nach Anspruch 1, wobei das Kompilieren der Funktion, das Identifizieren eines Aufrufs und das Hinzufügen der Abhängigkeitsinformation zu einer Laufzeit durchgeführt werden.
  29. Computerimplementiertes Verfahren nach Anspruch 10, wobei das Markieren der ersten Klasse, das Markieren der zweiten Klasse und das Untersuchen der kompilierten Funktion zur Laufzeit durchgeführt werden.
  30. Rechensystem nach Anspruch 13, wobei das Kompilieren der Funktion, das Identifizieren eines Aufrufs und das Hinzufügen der Abhängigkeitsinformation zur Laufzeit durchgeführt werden.
  31. Computerlesbares Medium nach Anspruch 16, wobei das Kompilieren der Funktion, das Identifizieren eines Aufrufs und das Hinzufügen der Abhängigkeitsinformation zur Laufzeit durchgeführt werden.
DE69911104T 1998-03-24 1999-03-22 Statische Bindung von dynamisch abgesendeten Anrufen in Anwesenheit von dynamischer Verknüpfung und Ladung Expired - Lifetime DE69911104T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US7976598P 1998-03-24 1998-03-24
US79765P 1998-03-24

Publications (2)

Publication Number Publication Date
DE69911104D1 DE69911104D1 (de) 2003-10-16
DE69911104T2 true DE69911104T2 (de) 2004-07-08

Family

ID=22152672

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69911104T Expired - Lifetime DE69911104T2 (de) 1998-03-24 1999-03-22 Statische Bindung von dynamisch abgesendeten Anrufen in Anwesenheit von dynamischer Verknüpfung und Ladung

Country Status (5)

Country Link
EP (1) EP0950947B1 (de)
JP (1) JP5129904B2 (de)
KR (1) KR19990078174A (de)
CN (2) CN1287280C (de)
DE (1) DE69911104T2 (de)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5983021A (en) * 1998-05-27 1999-11-09 Sun Microsystems Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US6223340B1 (en) * 1998-10-09 2001-04-24 Sun Microsystems, Inc. Method for directly inlining virtual calls without on-stack replacement
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
EP1515232A4 (de) 2002-06-18 2007-09-05 Matsushita Electric Ind Co Ltd Programmausführungsendgeräteeinrichtung, programmausführungsverfahren und programm
JP2006146613A (ja) * 2004-11-19 2006-06-08 Matsushita Electric Ind Co Ltd プログラム変換方法
US7490320B2 (en) * 2005-02-18 2009-02-10 International Business Machines Corporation Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
KR20080039080A (ko) * 2006-10-31 2008-05-07 에스케이 텔레콤주식회사 이종언어편집 라이브러리의 인터페이스 기능이 구비된단말장비, api호출방법 및 컴파일함수생성방법
US8819649B2 (en) 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US20130205282A1 (en) * 2012-02-07 2013-08-08 Microsoft Corporation Transferring program execution from compiled code to interpreted code
CN105335137B (zh) * 2014-07-23 2019-01-18 国际商业机器公司 用于处理源文件的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3178151B2 (ja) * 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5613120A (en) * 1994-10-20 1997-03-18 Silicon Graphics, Inc. System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program
US5606699A (en) * 1995-04-28 1997-02-25 International Business Machines Corporation Storing and querying execution information for object-oriented programs
US5748963A (en) * 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding

Also Published As

Publication number Publication date
CN1529237A (zh) 2004-09-15
DE69911104D1 (de) 2003-10-16
EP0950947A3 (de) 2000-02-23
CN1287280C (zh) 2006-11-29
JPH11327906A (ja) 1999-11-30
EP0950947B1 (de) 2003-09-10
CN1235301A (zh) 1999-11-17
JP5129904B2 (ja) 2013-01-30
KR19990078174A (ko) 1999-10-25
CN1149477C (zh) 2004-05-12
EP0950947A2 (de) 1999-10-20

Similar Documents

Publication Publication Date Title
DE60031370T2 (de) Tokenbasierte verknüpfung
DE60035745T2 (de) Verfahren zum bei Bedarf Laden und Ausführen einer Netzwerkanwendung
DE69926602T2 (de) Hybrider Rechtzeitkompiler der minimale Betriebsmittel verwendet
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE69724322T2 (de) Verfahren und Anordnung zum frühzeitigen Einfügen von Assemblercode zwecks Optimierung
DE60108181T2 (de) Änderbarkeitsanalyse in java
DE69911468T2 (de) Verfahren zum direkten inlinen von virtuellen anrufen ohne on-stack-vertretung
DE60006410T2 (de) Verfahren und system zum verteilen von objektorientierten rechnerprogrammen
DE60034263T2 (de) Verfahren zum Identifizieren von Aufrufen in Javapaketen wobei die Ziele sicher im selben Paket liegen
DE69922015T2 (de) Verfahren und vorrichtung zum übersetzen und ausführen von arteigenem code in einer umgebung mit virtuellen maschinen
DE69838540T2 (de) Mobilkommunikationssystem
US7802249B2 (en) Techniques for implementing pluggable virtual machines
US6513156B2 (en) Interpreting functions utilizing a hybrid of virtual and native machine instructions
DE602004006947T2 (de) Plattformunabhängige Erzeugung einer einmaligen Kennung
DE69814174T2 (de) Java laufzeitsystem mit veränderter sammlung von konstanten
DE60002295T2 (de) Aufwandslose ausnahmebehandlung
DE69835062T2 (de) Gemischter Registerstapel und Ausnahmebehandlung
DE69834087T2 (de) Verfahren und Gerät zur Vorverarbeitung und Verpackung von Klassendateien
DE69836902T2 (de) Auf variable instruktionen eingestellter computer
DE60018505T2 (de) Vertraute Überprüfung von Rechnerprogrammodulen
von Oheimb et al. Hoare logic for NanoJava: Auxiliary variables, side effects, and virtual methods revisited
DE19928980A1 (de) Codeerzeugung für einen Bytecode-Compiler
DE69911104T2 (de) Statische Bindung von dynamisch abgesendeten Anrufen in Anwesenheit von dynamischer Verknüpfung und Ladung
GB2442495A (en) Method and apparatus for handling dynamically linked function calls with respect to program code conversion
EP1186996B1 (de) Programmierverfahren zum Ermöglichen von Polymorphismus

Legal Events

Date Code Title Description
8364 No opposition during term of opposition