DE69834230T2 - Verfahren und Gerät zur Optimierung des Programmablaufs von Anwendungen - Google Patents

Verfahren und Gerät zur Optimierung des Programmablaufs von Anwendungen Download PDF

Info

Publication number
DE69834230T2
DE69834230T2 DE69834230T DE69834230T DE69834230T2 DE 69834230 T2 DE69834230 T2 DE 69834230T2 DE 69834230 T DE69834230 T DE 69834230T DE 69834230 T DE69834230 T DE 69834230T DE 69834230 T2 DE69834230 T2 DE 69834230T2
Authority
DE
Germany
Prior art keywords
list
compilation
computer
methods
computer program
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
DE69834230T
Other languages
English (en)
Other versions
DE69834230D1 (de
Inventor
Lars Palo Alto Bak
Urs Goleta 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 DE69834230D1 publication Critical patent/DE69834230D1/de
Application granted granted Critical
Publication of DE69834230T2 publication Critical patent/DE69834230T2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Description

  • Hintergrund der Erfindung
  • 1. Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft allgemein Verfahren und Vorrichtungen zum Optimieren der Ausführung von Softwareanwendungen. Insbesondere betrifft die vorliegende Erfindung Verfahren und Vorrichtungen zum Durchführen von Kompilierungen oder sonstigen Aktivitäten während Pausen in der Gesamtausführung eines Computerprogramms zum Optimieren der Nutzung von Computersystemressourcen.
  • 2. Beschreibung des Standes der Technik
  • Computersysteme sind oft über ein Netzwerk, beispielsweise Nahbereichsnetze, Intranets und Internets, aus Computersystemen dergestalt verbunden, dass sie Ressourcen wie beispielsweise Softwareanwendungen gemeinsam nutzen können. Generell können Softwareanwendungen, oder Computerprogramme, verschiedenen Computersystemen in verschiedenen Formaten dargeboten werden, weil jedes Computersystem Softwareanwendungen in einem bestimmten Format benötigt. Alternativ können die Computerprogramme einem Computersystem in einer maschinenunabhängigen Form, d. h. als Byte-Codes, dargeboten werden, damit eine Form eines Computerprogramms von vielen verschiedenen Computersystemen verwendet werden kann.
  • Wenn Computerprogramme in einer maschinenunabhängigen Form dargeboten werden, so können die Programme direkt interpretiert werden, oder die Programme können in maschinenabhängigen Code, d. h. "Maschinencode", übersetzt werden. Programme, die direkt übersetzt werden, brauchen weniger Platz in einem Computersystem als Programme, die in Maschinencode übersetzt werden. Allerdings haben Programme, die direkt interpretiert werden, in dem meisten Fällen langsamere Ausführungsgeschwindigkeiten als Programme, die in Maschinencode übersetzt werden. Daher wird die Entscheidung, ob ein Computerprogramm direkt interpretiert wird, anstatt das Computerprogramm in Maschinencode zu übersetzen, oft auf die relative Bedeutung des Platzes im Vergleich zur Ausführungsgeschwindigkeit gestützt.
  • Ein Ansatz zur Kompilierung besteht darin, Verfahren innerhalb eines Programms zu kompilieren, das in die aktive Ausführung geht, wenn der Ausführungsbefehl zum ersten Mal ergeht. Dieser Ansatz wird häufig entweder als dynamische oder "Laufzeit"-Kompilierung bezeichnet. Ein Problem bei der dynamischen Kompilierung ist, dass der mit dem Programm verbundene Kompilierungsaufwand übermäßig hoch werden kann. Das heißt, wenn eine relativ große Anzahl von Verfahren ungefähr zur selben Zeit kompiliert werden muss, so kann der Aufwand, der mit der Kompilierung des Programms verbunden ist, einen Umfang annehmen, der sich nachteilig auf die Gesamtausführung des Programms auswirkt. Generell kann eine Über-Nutzung von Systemressourcen zur Kompilierung zu einer weniger effizienten, langsameren Ausführung des Programms führen. Außerdem kann diese Zeit, die ein Kompilierer braucht, der Verfahren während der aktiven Programmausführung kompiliert, Pausen in die Ausführung des Programms eintragen, die von einem Benutzer bemerkt werden. Wenn beispielsweise ein Benutzer einen Befehl in das Programm eingibt, während der Kompilierungsaufwand des Programms hoch ist, so kann es bei der Reaktion auf die Benutzereingabe zu einer Verzögerung kommen. Solche Verzögerungen bei der Reaktion können für einen Benutzer ärgerlich sein. Darum wären Mechanismen wünschenswert, welche die augenscheinliche Effizienz einer dynamischen Kompilierung von Verfahren in einem Computerprogramm verbessern.
  • Franz, M.: "Run-Time Code Generation as a Central System Service", Workshop on Hot Topics in Operating Systems, 5. Mai 1997, Seiten 112 bis 117, offenbart Verfahren zur kontinuierlichen Rekompilierung von kompiliertem Code während der Ausführung eines Computerprogramms während der Leerlaufzeiträume in der Verarbeitung eines Computerprogramms zum Zweck der Optimierung von kompiliertem Code. Die kontinuierliche Rekompilierung von kompiliertem Code ermöglicht es außerdem, dass dynamisch verknüpfter Code die Erscheinung und die Vorteile einer monolithischen Anwendung hat und trotzdem noch erweiterbar ist.
  • Um die oben genannten und weitere Aufgaben der Erfindung zu erfüllen, werden Verfahren und eine Vorrichtung zum dynamischen Kompilieren von Verfahren während der Leerlaufzeiträume in der Ausführung eines Computerprogramms offenbart. Die beschriebenen Verfahren eignen sich besonders zur Verwendung in Computersystemen, die dafür konfiguriert sind, sowohl interpretierte als auch kompilierte Byte-Codes auszuführen. Gemäß einem Aspekt der vorliegenden Erfindung wird ein per Computer implementiertes Verfahren zum dynamischen Kompilieren von Verfahren während eines Leerlaufzeitraums in der Verarbeitung eines Computerprogramms bereitgestellt, wobei das per Computer implementierte Verfahren Folgendes umfasst: Identifizieren des Leerlaufzeitraums; Identifizieren eines ersten interpretierbaren Verfahrens, das während des Leerlaufzeitraums aus mehreren interpretierbaren Verfahren ausgewählt wurde, wobei die mehreren Verfahren in dem Computerprogramm enthalten sind, wobei das Computerprogramm unter Verwendung von sowohl interpretiertem Programmcode als auch kompiliertem Programmcode ausgeführt werden kann; und Initialisieren einer Kompilierung des ersten Verfahrens, wobei die Initialisierung der Kompilierung des ersten Verfahrens während des Leerlaufzeitraums erfolgt.
  • Bei einer Ausführungsform wird, wenn während der Kompilierung eines Verfahrens ein Interrupt empfangen wird, die Fortführung der Kompilierung für einen vorgegebenen Zeitraum zugelassen. Wenn die Kompilierung nicht während des vorgegebenen Zeitraum vollendet wird, so wird die Kompilierung abgebrochen.
  • Das Verfahren kann des Weiteren die Vollendung der Kompilierung des ersten Verfahrens beinhalten, wenn ein Interrupt empfangen wird.
  • Gemäß einem weiteren Aspekt der Erfindung wird ein Computersystem zum dynamischen Kompilieren von Verfahren während eines Leerlaufzeitraums in der Verarbeitung eines Computerprogramms bereitgestellt, wobei das Computersystem Folgendes umfasst: einen Mechanismus zum Identifizieren des Leerlaufzeitraums; einen Mechanismus zum Identifizieren eines ersten interpretierbaren Verfahrens, das während des Leerlaufzeitraums aus mehreren interpretierbaren Verfahren ausgewählt wurde, wobei die mehreren Verfahren in dem Computerprogramm enthalten sind und das Computerprogramm unter Verwendung von sowohl interpretiertem Programmcode als auch kompiliertem Programmcode ausgeführt werden kann; und einen Kompilierer zum Initialisieren einer Kompilierung des ersten Verfahrens während des Leerlaufzeitraums.
  • Gemäß einem weiteren Aspekt wird ein Computerprogrammcode bereitgestellt, der durch eine Datenverarbeitungsvorrichtung ausgeführt werden kann, um die Verfahrens- und Computersystemaspekte der Erfindung bereitzustellen. Es wird des Weiteren ein Computerprogrammprodukt bereitgestellt, das ein computerlesbares Speichermedium umfasst, auf dem der Computerprogrammcode gemäß diesem Aspekt der Erfindung gespeichert ist.
  • Diese und weitere Vorteile der vorliegenden Erfindung werden beim Lesen der folgenden detaillierten Beschreibungen und beim Studium der verschiedenen Figuren der Zeichnungen deutlich.
  • Die Erfindung kann am besten anhand der folgenden Beschreibung in Verbindung mit den begleitenden Zeichnungen verstanden werden.
  • 1 ist ein Blockschaubild eines Computersystems, das Code dynamisch gemäß einer Ausführungsform der vorliegenden Erfindung kompiliert.
  • 2 ist ein Prozessablaufdiagramm, das die Schritte veranschaulicht, die mit der Ausführung eine Programms verbunden sind, das die Fähigkeit enthält, Code während Pausen gemäß einer Ausführungsform der vorliegenden Erfindung zu kompilieren.
  • 3 ist ein Prozessablaufdiagramm, das die Schritte veranschaulicht, die mit der Durchführung von Kompilierungen von Verfahren, d. h. Schritt 216 von 2, gemäß einer Ausführungsform der vorliegenden Erfindung verbunden sind.
  • 4 ist ein Prozessablaufdiagramm, das die Schritte veranschaulicht, die mit dem Identifizieren des Verfahrens der höchsten Priorität, d. h. Schritt 302 von 3, gemäß einer Ausführungsform der vorliegenden Erfindung verbunden sind.
  • 5 veranschaulicht ein typisches Allzweckcomputersystem, das sich für die Implementierung der vorliegenden Erfindung eignet.
  • 6 ist eine schaubildhafte Darstellung einer virtuellen Maschine, die sich für die Implementierung der vorliegenden Erfindung eignet.
  • Detaillierte Beschreibung der Ausführungsformen
  • Wie oben beschrieben, kann die dynamische Kompilierung von Verfahren, die mit einem Byte-codierten Programm verbunden sind, während das Programm aktiv arbeitet, dazu führen, dass das Programm ineffizient arbeitet. Diese Ineffizienz kann das Ergebnis einer zu starken Beanspruchung der verfügbaren Computersystemressourcen durch den Kompilierer oder des Kompilierungsaufwandes sein. Die Zeit, die ein Kompilierer braucht, der dynamisch Verfahren während der aktiven Programmausführung kompiliert, kann Verzögerungen in die Ausführung des Programms eintragen. Wenn ein Benutzer diese Verzögerungen wahrnimmt, so können die Verzögerungen als inakzeptabel empfunden werden, besonders eine Verzögerung relativ lang ist, beispielsweise länger als etwa 200 Millisekunden.
  • Ein Ansatz zur Verbesserung der Leistung solcher Programme besteht darin, das Vermischen von sowohl interpretierten als auch dynamisch kompilierten Byte-Codes zu gestatten. In einem solchen System müssen immer noch Entscheidungen getroffen werden, wann es effizient ist, ein bestimmtes Verfahren zu kompilieren. Bei der vorliegenden Erfindung werden ein Verfahren und eine Vorrichtung zum Verzögern der dynamischen Kompilierung von Verfahren in einem Computerprogramm bei relativ hohem Kompilierungsaufwand beschrieben. Genauer gesagt, kann – wenn festgestellt wird, dass der Kompilierungsaufwand zu hoch ist – die dynamische Kompilierung wenigstens einiger der Verfahren verzögert werden, bis es Zeiträume von relativ geringerer Aktivität in der Gesamtverarbeitung des Programms gibt.
  • Durch Verzögern der dynamischen Kompilierung wenigstens einiger Byte-codierter Verfahren, die zur Kompilierung vorgesehen sind, können Computerressourcen effizienter genutzt werden. Während ein Computerprogramm während der Verarbeitung im Wesentlichen inaktiv ist, beispielsweise wenn sich das Computerprogramm im Leerlauf befindet, während es auf eine Eingabe von einem Benutzer wartet, so ist der Gesamtressourcenauslastungsaufwand in Verbindung mit der Ausführung des Programms allgemein relativ niedrig. Während solcher Zeiträume mit niedriger Aktivität können die verfügbaren Systemressourcen genutzt werden, um Kompilierungen von Verfahren durchzuführen, die zuvor als Verfahren identifiziert wurden, die zu kompilieren sind. Die Durchführung von Kompilierungen, während der Rechenaufwand des Computerprogramms niedrig ist, gestattet die effiziente Nutzung von Gesamtsystemressourcen und verursacht in der Regel keine Verzögerungen, die von einem Benutzer bemerkt werden.
  • Zunächst wird unter Bezug auf 1 ein Computersystem, das eine dynamische Kompilierung von Byte-Codes gestattet, gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. Byte-Codes 144 werden als Eingabewerte in ein Computersystem 146 bei Laufzeit eingegeben. Byte-Codes 144, die allgemein als ein Computerprogramm organisiert sein können, sind in der Regel in zerlegbaren Segmenten wie beispielsweise als Verfahren oder Routinen angeordnet. Bei einer Ausführungsform können Byte-Codes 144 von einer Kompilierzeit-Umgebung innerhalb einer virtuellen Maschine an eine Laufzeit-Umgebung, beispielsweise ein Computersystem 146, innerhalb derselben virtuellen Maschine übermittelt werden. Eine geeignete virtuelle Maschine, auf der die vorliegende Erfindung implementiert werden kann, wird unten anhand von 6 näher besprochen.
  • Wenn Byte-Codes 144 an das Computersystem 146 übermittelt werden, so können die Byte-Codes 144 mit einem Interpretierer 148 verarbeitet werden. Stattdessen können die Byte-Codes 144 auch durch einen Kompilierer 150 kompiliert werden, um kompilierte Byte-Codes 152 zu erzeugen. Es versteht sich, dass die Byte-Codes 144 allgemein sowohl in den Interpretierer 148 als auch in den Kompilierer 150 im Wesentlichen gleichzeitig zur Verarbeitung eingegeben werden können.
  • Jedes Mal, wenn ein Verfahren aufgerufen wird, werden – wenn das Verfahren nicht kompiliert wird – Byte-Codes 144, die mit dem Verfahren verbunden sind, mittels des Interpretierers 148 interpretiert. Bei einer Ausführungsform wird ein Messwert bezüglich der Anzahl, wie oft ein Verfahren interpretiert wird, geführt. Zu solchen Messwerten kann eine Zähleinrichtung gehören, beispielsweise ein Aufrufzähler, der in jedem interpretierten Verfahren enthalten ist und jedes Mal, wenn das Verfahren interpretiert wird, inkrementiert wird.
  • Wenn die Anzahl, wie oft ein Verfahren interpretiert wird, eine Schwelle, d. h. einen begrenzenden Wert, überschreitet, kann das Verfahren mittels eines Kompilierers 150 kompiliert werden. Das wiederholte Interpretieren eines Verfahrens, das in häufig ausgeführtem Code 158 enthalten ist, kann ineffizient sein, weil interpretierter Byte-Code 154 im Allgemeinen langsamer oder weniger effizient ausgeführt wird als kompilierter Code. Das Kompilieren von häufig ausgeführtem Code 158 kann es im Allgemeinen ermöglichen, dass Verfahren, die in häufig ausgeführtem Code 158 verkörpert sind, effizienter ausgeführt werden, weil Zeiteinsparungen, die durch Kompilieren des Verfahrens gewonnen werden, wahrscheinlich den Kompilierungsaufwand wettmachen, der mit dem Kompilierungsprozess verbunden ist.
  • Während der Laufzeit wird der Kompilierungsaufwand, der mit dem Kompilieren der Byte-Codes 144 unter Verwendung des Kompilierers 150 verbunden ist, überwacht, um zu gewährleisten, dass der Kompilierungsaufwand nicht ein normalerweise vorgegebenes maximal akzeptables Niveau übersteigt. Der Kompilierungsaufwand wird oft in Form des Prozentsatzes an Prozessorzeit ausgedrückt, der zur Kompilierung im Gegensatz zur Ausführung benötigt wird. Die vorgegebene maximale Aufwandshöhe kann je nach den Erfordernissen und Eigenschaften eines bestimmten Systems variiert werden. Für eine virtuelle Maschine beispielsweise, die eine hohe Ausführungsleistung haben soll, kann das vorgegebene maximale Niveau innerhalb des Bereichs von ungefähr 10 Prozent bis ungefähr 30 Prozent Auslastung der Gesamtsystemressourcen liegen. Wenn der Aufwand, der mit der Kompilierung von Byte-Codes 144 verbunden ist, das vorgegebene maximale Niveau übersteigt, so können Verfahren, die kompiliert werden würden, wenn der Kompilierungsaufwand geringer wäre, in eine Ausführungsliste oder -schlange eingefügt werden. Diese Ausführungsliste ist im Wesentlichen eine Warteliste von Verfahren, die verarbeitet werden können, wenn der Kompilierungsaufwand geringer ist, d. h. Verfahren in der Ausführungsliste können kompiliert werden, wenn der Kompilierungsaufwand geringer ist. Genauer gesagt, kann die Ausführungsliste zu Zeiten verarbeitet werden, wenn sowohl der Kompilierungsaufwand als auch der Gesamtrechenaufwand, der mit dem Computersystem 146 verbunden ist, auf einem niedrigen Niveau liegen.
  • Wenn Byte-Codes während anderweitig inaktiven Zeiträumen in der Gesamtausführung eines Programm kompiliert werden sollen, beispielsweise während Leerlaufzeiträumen, zu denen es während der gesamten Verarbeitung von Byte-Codes kommt, so kann das Programm überwacht werden, um festzustellen, wenn Pausen entstehen. Als nächstes wird unter Bezug auf 2 ein Prozess der Ausführung eines Programms oder einer Anwendung, welche die Fähigkeit zum Kompilieren von Code während Pausen beinhaltet, gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. Die Ausführung eines Programm beginnt bei Schritt 210, und in Schritt 212 wird eine Feststellung getroffen, ob die Ausführung des Programms einen Leerlaufzeitraum erreicht hat.
  • Ein Leerlaufzeitraum ist allgemein eine Pause, beispielsweise eine Denkpause, in der Verarbeitung des Programms, während der das Programm im Wesentlichen inaktiv ist. Das Programm kann auf eine Aktion, wie beispielsweise ein Zeitsteuerungssignal, von dem zugehörigen Betriebssystem warten, oder das Programm kann auf eine Benutzereingabe vor dem aktiven Fortsetzen der Ausführung warten. Im Allgemeinen kommt es zu einer Denkpause, während das Programm auf eine Aktion von einem Benutzer wartet. Es versteht sich, dass die Länge eines Leerlaufzeitraums in einem weiten Bereich variieren kann. Beispielsweise kann die Länge eines Leerlaufzeitraums von sehr wenigen Millisekunden bis ungefähr eine halbe Sekunde reichen. Wenn ein Leerlaufzeitraum eintritt, weil ein Programm auf eine Eingabe von einem Benutzer wartet, so kann der Leerlaufzeitraum allgemein viel länger sein, wie beispielsweise in der Größenordnung einer Anzahl von Sekunden, Minuten, Tagen oder mehr.
  • Im Allgemeinen wird ein Schwellenwert benutzt, um eine "nützliche" Pause zu erkennen. Wenn beispielsweise die tatsächliche Pause eine vorgegebene Anzahl von Millisekunden gedauert hat, so kann das System die Pause als eine nützliche Pause erkennen, die wahrscheinlich noch eine ganze Weile länger dauern wird. Wenn die Pause wahrscheinlich fortgesetzt wird, kann die Fortführung von Kompilierungen gestattet werden, um die Pause auszunutzen. Daher beinhaltet die Feststellung in Schritt 212, ob die Ausführung des Programms einen Leerlaufzeitraum erreicht hat, die Feststellung, ob ein Zeitraum von geringer Aktivität einen Schwellenwert erreicht hat, beispielsweise ungefähr 100 Millisekunden oder ungefähr eine halbe Sekunde.
  • Im Allgemeinen kann das Eintreten eines Leerlaufzeitraums oder eines Zeitraums mit relativ geringer Aktivität durch Überwachen der Auslastung der zentralen Verarbeitungseinheit (CPU), die mit der Ausführung des Programms verbunden ist, festgestellt werden. Stattdessen kann das Vorhandensein eines Leerlaufzeitraums auch durch Überwachen des Status' von Befehlsfolgen, die mit dem Gesamtcomputersystem verbunden sind, festgestellt werden.
  • Wenn die CPU-Auslastung überwacht wird, um Zeiträume relativer Inaktivität zu erkennen, so wird die CPU-Auslastung im Wesentlichen überwacht, um festzustellen, wann die CPU-Auslastung unter eine bestimmte Auslastungsschwelle abfällt. Die Auslastungsschwelle, d. h. eine "Schwelle geringer Aktivität", kann in einem weiten Bereich variiert werden. Beispielsweise kann die Auslastungsschwelle so eingestellt werden, dass, wenn im Wesentlichen nur Aktivitäten mit niedrigem Aufwand stattfinden, wie beispielsweise das Einstellen eines Cursors, der periodisch blinkt, das Programm als "im Leerlauf befindlich" betrachtet wird. Wenn bei einer Ausführungsform die CPU-Auslastung während der Verarbeitung des Programms unter eine Auslastungsschwelle abfällt, die bei ungefähr 20 Prozent der Gesamtsystemressourcen liegt, so wird die Gesamtverarbeitung des Programms als in einem Zeitraum geringer Aktivität befindlich betrachtet. Zu solchen Zeiten können wenigstens ungefähr 80 Prozent der Systemressourcen zur Nutzung zur Verfügung stehen.
  • Das Überwachen des Status' von Befehlsfolgen kann das Untersuchen eines Befehlsfolgenplaners beinhalten, wie dem Fachmann klar sein wird. Wenn der Befehlsfolgenplaner anzeigt, dass alle Befehlsfolgen blockiert sind, d. h. dass sich im Wesentlichen keine der Befehlsfolgen in einem ablauffähigen Zustand befindet, so lautet die Schlussfolgerung, dass das Programm keine CPU-Zeit verbraucht. Die CPU-Zeit wird im Allgemeinen erst dann gebraucht, wenn ein Signal ankommt, woraufhin die Sperre einer Befehlsfolge aufgehoben werden kann. Wenn keine CPU-Zeit verbraucht wird, so befindet sich das Programm allgemein in einem Leerlaufzeitraum.
  • Wenn in Schritt 212 festgestellt wird, dass sich die Ausführung des Programms nicht in einem Leerlaufzeitraum befindet, so kehrt der Prozessablauf zu Schritt 210 zurück, wo die Ausführung des Programms fortgesetzt wird. Wenn stattdessen in Schritt 212 festgestellt wird, dass ein Leerlaufzeitraum vorliegt, so wird in Schritt 214 eine Feststellung getroffen, ob Aufgaben anstehen, beispielsweise Kompilierungen. Das heißt, es wird eine Feststellung getroffen, ob es Aufgaben gibt, die zur Ausführung während Leerlaufzeiträumen vorgesehen sind. Zu den Aufgaben kann allgemein ein weites Feld von Aufgaben gehören, wie beispielsweise Kompilierungen und Datenmüllsammlungen. Solche Aufgaben können anhand ihrer relativen Wichtigkeit innerhalb eines Systems priorisiert werden. Bei der beschriebenen Ausführungsform werden die Aufgaben anhand anstehender Kompilierungen beschrieben.
  • Anstehende Kompilierungen können allgemein von zwei Quellen erhalten werden: einer Datenbankliste und einer Ausführungsliste, bei denen es sich um Listen von "Kandidaten"-Verfahren zur Kompilierung handelt. Eine Konfiguration zur Erstellung einer Datenbankliste kann ein System beinhalten, das kompilierte Verfahren überwacht, wie beispielsweise eine Konfiguration zum Erstellen einer Datenbankliste, wenn eine Datenbank eingebettet wird. Bei einem solchen System ist die Datenbankliste im Wesentlichen eine "Arbeitsgruppe" oder eine "Kandidatengruppe" von Verfahren, die während einer vorangegangenen Ausführung des Programms kompiliert wurden und als Verfahren betrachtet werden, die wahrscheinlich während einer anschließenden Ausführung des Programms kompiliert werden. Es können auch andere Mechanismen zum Erstellen oder Ergänzen einer Datenbankliste verwendet werden. Es versteht sich, dass bei einigen Ausführungsformen die Datenbankliste auch andere Aufgaben enthalten kann, wie beispielsweise die Durchführung von Datenmüllsammlungen.
  • Eine Ausführungsliste, wie oben angesprochen, ist eine Schlange aus Verfahren – oder eine Kandidatengruppe von Verfahren -, die während der momentanen Ausführung des Programms erstellt wird. Die Ausführungsliste kann Verfahren enthalten oder bezeichnen, deren Kompilierung unterdrückt wurde, weil der Kompilierungsaufwand zuvor als zu hoch eingeschätzt wurde, um ein Kompilieren der Verfahren zuzulassen. Die Ausführungsliste kann ebenso Verfahren bezeichnen, die der Liste periodisch durch einen separaten Abtastungsprozess hinzugefügt wurden, der die Aufrufzähler überprüft, d. h. Zähler, die zählen, wie oft ein Verfahren interpretiert wurde, die interpretierten Verfahren zugeordnet sind. Im Allgemeinen wird der Auf rufzähler für ein Verfahren jedes Mal inkrementiert, wenn das Verfahren aufgerufen wird. Der Abtaster kann periodisch Aufrufzähler überprüfen, um festzustellen, ob Aufrufzähler von Verfahren, die nicht kürzlich aufgerufen wurden, sich auf einem Niveau befinden, das momentan so eingeschätzt wird, dass das Verfahren als kompilationsfähig angesehen werden kann. Da die Schwelle, beispielsweise die Anzahl der Aufrufe eines Verfahrens, die allgemein erreicht werden muss, damit das Verfahren zur Kompilierung in Betracht gezogen wird, während einer Programmausführung variieren kann, können Verfahren mit Aufrufzählern, die über einer momentanen Schwelle liegen, der Ausführungsliste durch den Abtaster hinzugefügt werden. Es können auch andere Mechanismen zum Erstellen oder Ergänzen der Ausführungsliste verwendet werden. Bei einigen Ausführungsformen kann die Ausführungsliste einer allgemeinen Arbeitsliste zugeordnet sein, die anstehende Kompilierungen neben weiteren anstehenden Aufgaben, beispielsweise Datenmüllsammlungen, enthält.
  • Wenn durch Überprüfen der Ausführungsliste und der Datenbankliste in Schritt 214 festgestellt wird, dass es keine anstehenden Aufgaben gibt, so kehrt der Prozessablauf zu Schritt 210 zurück, wo das Programm weiter ausgeführt wird. Wenn andererseits festgestellt wird, dass es anstehende Kompilierungen gibt, so werden in Schritt 216 die Aufgaben, beispielsweise Kompilierungen, ausgeführt. Die Schritte, die mit der Durchführung der anstehenden Kompilierungen verbunden sind, werden unten unter Bezug auf 3 beschrieben. Nachdem anstehende Kompilierungen ausgeführt sind, kehrt der Prozessablauf zu Schritt 210 zurück, wo das Programm weiter ausgeführt wird.
  • Wie zuvor angesprochen, wird bei der beschriebenen Ausführungsform ein Verfahren kompiliert, wenn erwartet wird, dass das Kompilieren des Verfahrens und das Aufrufen des kompilierten Verfahrens wahrscheinlich effizienter ist als das Interpretieren des Verfahrens. Solche Kompilierungen können verzögert werden, bis es Leerlaufzeiträume während der Ausführung des Gesamtprogramms gibt, um einen übermäßigen Kompilierungsaufwand zu vermeiden. 3 ist ein Prozessablaufdiagramm, das die Schritte veranschaulicht, die mit der Durchführung von verzögerten Kompilierungen von Verfahren, d. h. Schritt 216 von 2, gemäß einer Ausführungsform der vorliegenden Erfindung verbunden sind. Der Prozess der Durchführung von Kompilierungen beginnt bei Schritt 302, wo das Kandidaten-Verfahren mit der höchsten Priorität identifiziert wird. Bei einer Ausführungsform kann das Verfahren der höchsten Priorität das Verfahren mit der größten Anzahl von Aufrufzählungen in der Ausführungsliste oder das Verfahren mit der größten Anzahl von Aufrufzählungen, die durch die Ausführungsliste identifiziert wurden, sein. Stattdessen kann das Verfahren von höchster Priorität auch das Verfahren mit der kürzesten erwarteten Kompilierungszeit auf der Ausführungsliste sein. Die Identifizierung des Verfahrens der höchsten Priorität wird weiter unten unter Bezug auf 4 näher beschrieben.
  • Nachdem das Verfahren von höchster Priorität in Schritt 302 identifiziert wurde, wird in Schritt 304 eine Feststellung getroffen, ob das Verfahren von höchster Priorität bereits kompiliert wurde. Das Verfahren von höchster Priorität kann aus einer Vielzahl verschiedener Gründe bereits kompiliert sein. Beispielsweise kann das Verfahren, nachdem es in die Ausführungsliste gelegt wurde, im Verlauf der Gesamtprogrammausführung aufgerufen und kompiliert werden, während der Kompilierungsaufwand niedrig ist. Daher ist das Verfahren bereits kompiliert und wurde möglicherweise noch nicht aus der Ausführungsliste entfernt, weil ein wiederholtes Aktualisieren der Ausführungsliste teuer ist. Das Verfahren der höchsten Priorität kann ebenso bereits kompiliert sein, wenn das Verfahren aus der Datenbankliste entnommen wurde. Das heißt, wenn dasselbe Verfahren sowohl in der Ausführungsliste als auch in der Datenbankliste erscheint, wenn das Verfahren beispielsweise bereits unter Verwendung der Ausführungsliste kompiliert wurde und die Datenbankliste aufgrund der hohen Kosten nicht aktualisiert wird, so kann das Verfahren bereits kompiliert sein, wenn es als das Verfahren der höchsten Priorität in der Datenbankliste identifiziert wird.
  • Wenn in Schritt 304 festgestellt wird, dass das Verfahren der höchsten Priorität bereits kompiliert ist, so kann das Verfahren aus der entsprechenden Liste, d. h. aus der Ausführungsliste oder der Datenbankliste, entfernt werden, und der Prozessablauf kehrt zu Schritt 302 zurück, wo ein neues Verfahren der höchsten Priorität identifiziert wird. Wenn stattdessen festgestellt wird, dass das Verfahren der höchsten Priorität nicht bereits kompiliert wurde, so beginnt in Schritt 306 die Kompilierung des Verfahrens der höchsten Priorität. Das heißt, die Kompilierung des Verfahrens der höchsten Priorität wird initialisiert.
  • Während der Kompilierung des Verfahrens der höchsten Priorität können Interrupts empfangen werden. Im Allgemeinen können Interrupts Zeitsteuerungssignale und Benutzereingaben, beispielsweise Tastatureingaben, enthalten. In Schritt 308 wird festgestellt, ob ein Interrupt empfangen wurde. Wie der Fachmann weiß, kann, wenn ein Interrupt empfangen wird, die Kompilierung des Verfahrens der höchsten Priorität automatisch enden, damit der Interrupt nach Bedarf verarbeitet werden kann.
  • Wenn ein Interrupt empfangen wurde, so darf die Kompilierung des Verfahrens der höchsten Priorität für einen vorgegebenen Zeitraum in Schritt 314 fortgesetzt werden. Der vorgegebene Zeitraum ist bei einer Ausführungsform im Wesentlichen eine "Lebenszeit" für eine Kompilierung, nachdem ein Signal empfangen wurde, das wenigstens eine Befehlsfolge in einen lauffähigen Zustand versetzt. Indem man die Kompilierung bis kurz nach dem Empfang eines Interrupts weiterlaufen lässt, erhält die Kompilierung eine Chance, vollendet zu werden, falls die Kompilierung kurz vor der Vollendung steht.
  • Obgleich der vorgegebene Zeitraum in weitem Umfang variiert werden kann, ist der vorgegebene Zeitraum im Allgemeinen eine Sache von Millisekunden, beispielsweise "X Millisekunden". Kürzere Zeiträume im Bereich von ungefähr 10 Millisekunden bis ungefähr 200 Millisekunden sind bevorzugt, weil beobachtet wurde, dass Verzögerungen von mehr als ungefähr 200 Millisekunden in Reaktion auf eine Benutzereingabe wahrgenommen werden und daher oft zu einem Ärgernis für einen Benutzerwerden. Der Zeitraum kann je nach der Signalquelle oder der Priorität der Befehlsfolgen in einem lauffähigen Zustand variiert werden, wobei kürzere Zeiträume für Signale oder Befehlsfolgen mit höherer Priorität verwendet werden.
  • Nachdem die Kompilierung in Schritt 314 für den vorgegebenen Zeitraum fortfahren durfte, wird in Schritt 316 eine Feststellung getroffen, ob die Kompilierung während des vorgegebenen Zeitraums erfolgreich zu Ende geführt wurde. Wenn die Kompilierung zu Ende geführt wurde, so schreitet der Prozessablauf weiter zu Schritt 210 von 2, wo die Gesamtausführung des Programms fortfährt. Es ist zu beachten, dass, sobald die Kompilierung vollendet ist, das neu kompilierte Verfahren ebenfalls entweder aus der Ausführungsliste oder aus der Datenbankliste entfernt wird, je nachdem, aus welcher Liste das Verfahren entnommen wurde.
  • Wenn die Kompilierung während des vorgegebenen Zeitraums nicht vollendet wird, so schreitet der Prozessablauf von Schritt 316 zu Schritt 318 voran, wo die Kompilierung abgebrochen wird. Die Vollendung der Kompilierung wird nicht gestattet, weil das Zulassen der Vollendung der Kompilierung zu einer erheblichen Verzögerung in der Ausführung des Gesamtprogramms oder genauer gesagt der Verarbeitung des Interrupts führen kann. Wenn die Kompilierung abgebrochen wird, so erfolgt eine "Bereinigung". Beispielsweise werden Systemressourcen, die bei der versuchten Kompilierung verwendet wurden, freigegeben, wie dem Fachmann klar ist. Nach dem Abbruch der Kompilierung schreitet der Prozessablauf zu Schritt 210 von 2 weiter, wo die Gesamtausführung des Programms fortgeführt wird.
  • Kehren wir zu Schritt 308 zurück. Falls während des Kompilierens des Verfahrens der höchsten Priorität kein Interrupt empfangen wurde, wird mit der Kompilierung in Schritt 310 fortgefahren. In Schritt 312 wird eine Feststellung getroffen, ob die Kompilierung vollendet wurde. Wenn festgestellt wird, dass die Kompilierung vollendet wurde, so kann das Verfahren der höchsten Priorität aus der entsprechenden Liste herausgenommen werden, und der Prozessablauf kehrt zu Schritt 302 zurück, wo ein neues Verfahren der höchsten Priorität identifiziert wird. Wenn in Schritt 312 festgestellt wird, dass die Kompilierung noch nicht vollendet wurde, so kann man die Kompilierung stattdessen auch fortfahren lassen, bis sie entweder vollendet ist oder aufgrund des Empfangs eines Interrupts in Schritt 308 abgebrochen wird.
  • Im Allgemeinen kann die Reihenfolge, in der Verfahren in einer Ausführungsliste und einer Datenbankliste kompiliert werden, anhand einer Reihe verschiedener Faktoren bestimmt werden. Den Verfahren in jeder Liste können Prioritätswerte relativ zu anderen Verfahren in derselben Liste zugewiesen werden. Die Prioritätswerte können allgemein jederzeit während der Gesamtausführung des Programms zugewiesen werden und können des Weiteren während des gesamten Verlaufs der Programmausführung aktualisiert werden. Beispielsweise können die Prioritätswerte in einer Liste jedes Mal berechnet und aktualisiert, d. h. neu bewertet, werden, wenn ein Verfahren der Liste hinzugefügt wird. Prioritätswerte können ebenso am Beginn jedes Leerlaufzeitraums neu bewertet werden, um zu gewährleisten, dass die Prioritäten von Verfahren in der Ausführungsliste und der Datenbankliste zur der Zeit aktuell sind, zu der Verfahren zur Kompilierung ausgewählt werden.
  • Der Prioritätswert eines Verfahrens kann auf der Grundlage einer beliebigen Kombination von Faktoren berechnet werden, einschließlich beispielsweise der Aufrufzählung des Verfahrens, der Position des Verfahrens innerhalb der Liste, der geschätzten Kompilierungszeit des Verfahrens und der Länge des momentanen Leerlaufzeitraums während der Gesamtausführung des Programms. Stattdessen kann – bei einer Ausführungsform – der Prioritätswert eines Verfahrens im Wesentlichen nach dem Zufallsprinzip zugewiesen werden.
  • Das Verfahren mit der höchsten Aufrufzählung in einer Liste kann die höchste Kompilierungspriorität haben, da es im Wesentlichen das am häufigsten aufgerufene interpretierte Verfahren ist. Die Position eines Verfahrens innerhalb einer Liste kann ebenso den Prioritätswert, der dem Verfahren zugewiesen wird, beeinflussen, weil das Verfahren, das der Liste zuletzt hinzugefügt wurde, oft auch wahrscheinlich in unmittelbarer Zukunft benötigt wird. Das Verfahren, das die kürzeste geschätzte Kompilierungszeit in einer Liste hat, kann die höchste Kompilierungspriorität haben, weil die Kompilierung eines Verfahrens mit einer kürzeren geschätzten Kompilierungszeit im Allgemeinen mit höherer Wahrscheinlichkeit während eines Leerlaufzeitraums vollendet sein wird als die Kompilierung eines Verfahrens mit einer längeren geschätzten Kompilierungszeit. Im Allgemeinen kann die Kompilierungszeit eines Verfahrens durch die Länge des Verfahrens geschätzt werden. Beispielsweise wird ein relativ kurzes Verfahren in der Regel eine relativ kurze Kompilierungszeit haben.
  • Die Länge des momentanen Leerlaufzeitraums kann ebenfalls den Prioritätswert eines Verfahrens beeinflussen. Wenn beispielsweise der momentane Leerlaufzeitraum bereits relativ lang war, so steigt im Allgemeinen die Wahrscheinlichkeit, dass der Zeitraum länger dauern wird. Lange Leerlaufzeiträume können oft daraus resultieren, dass ein Benutzer den Computer, auf dem die Gesamtausführung des Programms abläuft, für einen längeren Zeitraum verlässt. Insofern wurde beobachtet, dass, wenn festgestellt wird, dass ein momentaner Leerlaufzeitraum bereits relativ lang war, die Wahrscheinlichkeit, dass der Leerlaufzeitraum noch länger dauern wird, im Allgemeinen ziemlich hoch ist. Darum können, wenn erwartet wird, dass ein Leerlaufzeitraum relativ lang sein wird, Verfahren mit längeren erwarteten Kompilierungszeiten höhere Kompilierungsprioritäten haben, weil Verfahren mit kürzeren erwarteten Kompilierungszeiten in der Regel ohne Weiteres während anschließender kürzerer Leerlaufzeiträume kompiliert werden können.
  • Wie zuvor angesprochen, kann der Prioritätswert eines Verfahrens auf einer Anzahl unterschiedlicher Faktoren basieren. Oder anders ausgedrückt: Es kann eine Prioritätsfunktion zur Bestimmung eines Prioritätswertes verwendet werden. Die Form einer solchen Prioritätsfunktion kann im Allgemeinen über ein weites Feld variieren. Beispielsweise kann eine Prioritätsfunktion die Aufrufzählung für ein Verfahren durch die geschätzte Kompilierungszeit für das Verfahren teilen, um einen Prioritätswert für das Verfahren zu erhalten. Stattdessen kann eine Prioritätsfunktion auch die Verwendung der Aufrufzählung für Verfahren mit kürzeren geschätzten Kompilierungszeiten und die Verwendung der Aufrufzählung, geteilt durch eine Konstante, für Verfahren mit längeren geschätzten Kompilierungszeiten beinhalten.
  • Unter Bezug auf 4 werden als nächstes die Schritte in Verbindung mit dem Identifizieren des Verfahrens mit dem höchsten Prioritätswert, d. h. Schritt 302 von 3, gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. Die Identifizierung des Verfahrens der höchsten Priorität beginnt bei Schritt 402 mit einer Feststellung, ob Verfahren in der Ausführungsliste, die dem Programm zugeordnet ist, vorliegen.
  • Im Allgemeinen gilt, dass Verfahren in einer Ausführungsliste Kompilierungsprioritäten haben, die höher sind als die von Verfahren in einer Datenbankliste. Verfahren in der Ausführungsliste sind Verfahren, zu denen im Verlauf der Programmausführung festgestellt wurde, dass sie wahrscheinlich den zugehörigen Kompilierungsaufwand durch eine effizientere Ausführung überwinden, weil die Verfahren wiederholt aufgerufen werden. Stattdessen können Verfahren in der Datenbankliste auch Verfahren sein, die potenziell wiederholt aufgerufen werden können, so dass das Kompilieren der Verfahren wahrscheinlich vorteilhaft ist. Oder anders ausgedrückt: Die Ausführungsliste widerspiegelt die momentane oder tatsächliche Nutzung von Verfahren, während die Datenbankliste im Wesentlichen die langfristige Nutzung von Verfahren widerspiegelt. Darum werden Verfahren von der Ausführungsliste in der Regel vor Verfahren von der Datenbankliste zur Kompilierung ausgewählt, weil das Kompilieren der Verfahren in der Ausführungsliste mit höherer Wahrscheinlichkeit zu einer effizienteren Gesamtausführung des Programms, das die Verfahren verwendet, führt.
  • Wenn in Schritt 402 festgestellt wird, dass Verfahren in der Ausführungsliste vorliegen, so wird in Schritt 404 das Verfahren mit der höchsten Priorität in der Ausführungsliste zur Kompilierung ausgewählt. Sobald das Verfahren aus der Ausführungsliste ausgewählt wurde, ist der Prozess des Identifizierens des Verfahrens der höchsten Priorität vollendet. Wenn in Schritt 402 festgestellt wird, dass keine Verfahren in der Ausführungsliste vorliegen, so kann stattdessen auch das Verfahren der höchsten Priorität in der Datenbankliste zur Kompilierung ausgewählt werden. Nachdem das Verfahren aus der Datenbankliste ausgewählt wurde, ist der Prozess des Identifizierens des Verfahrens der höchsten Priorität vollendet.
  • Die vorliegende Erfindung kann allgemein auf jedem geeigneten Computersystem implementiert werden. Insbesondere kann die Kompilierung von in einer Schlange eingereihten Verfahren während Leerlaufzeiträumen in der Gesamtausführung eines Programms unter Verwendung einer beliebigen geeigneten virtuellen Maschine erreicht werden, wie beispielsweise die virtuelle Maschine, die unten unter Bezug auf 6 beschrieben wird. 5 veranschaulicht ein typisches Allzweckcomputersystem, das für die Implementierung der vorliegenden Erfindung geeignet ist. Das Computersystem 530 enthält eine beliebige Anzahl von Prozessoren 532 (auch als zentrale Verarbeitungseinheiten oder CPUs bezeichnet), die mit Speichervorrichtungen verbunden sind, die primäre Speichervorrichtungen 534 (in der Regel ein Nurlesespeicher oder ROM) und primäre Speichervorrichtungen 536 (in der Regel ein Direktzugriffsspeicher oder RAM) enthalten.
  • Das Computersystem 530, oder genauer gesagt: die CPU 532, kann zur Unterstützung einer virtuellen Maschine konfiguriert sein, wie dem Fachmann einleuchten wird. Ein Beispiel einer virtuellen Maschine, die auf einem Computersystem 530 unterstützt wird, wird unten unter Bezug auf 6 beschrieben. Wie auf diesem technischen Gebiet allgemein bekannt ist, dient ein ROM der Übertragung von Daten und Befehlen unidirektional zur CPU 532, während ein RAM in der Regel zur Übertragung von Daten und Befehlen in einer bidirektionalen Weise dient. Die CPU 532 kann allgemein eine beliebige Anzahl von Prozessoren enthalten. Beide primären Speichervorrichtungen 534, 536 können beliebige geeignete computerlesbare Speichermedien beinhalten. Ein sekundäres Speichermedium 538, bei dem es sich in der Regel um eine Massenspeichervorrichtung handelt, ist ebenfalls bidirektional mit der CPU 532 verbunden und stellt zusätzliche Datenspeicherkapazität zur Verfügung. Die Massenspeichervorrichtung 538 ist ein computerlesbares Medium, das zum Speichern von Programmen, einschließlich Computercode, Daten und dergleichen, verwendet werden kann. Die Massenspeichervorrichtung 538 ist in der Regel ein Speichermedium wie beispielsweise eine Festplatte oder ein Band, die im Allgemeinen langsamer sind als primäre Speichervorrichtungen 534, 536. Massenspeichervorrichtungen 938 können die Form eines Magnet- oder Papierstreifenlesegerätes oder eines sonstigen allgemein bekannten Gerätes annehmen. Es versteht sich, dass die Informationen, die in der Massenspeichervorrichtung 538 aufbewahrt werden, in geeigneten Fällen in standardmäßiger Weise als Teil eines RAM 534 als virtueller Speicher integriert sein können. Eine bestimmte primäre Speichervorrichtung 536, wie beispielsweise eine CD-ROM, kann ebenfalls Daten unidirektional an die CPU 532 übermitteln.
  • Die CPU 532 ist außerdem mit einem oder mehreren Eingabe-Ausgabe-Geräten 540 verbunden, zu denen Geräte wie beispielsweise Videomonitore, Trackballs, Mäuse, Tastaturen, Mikrofone, berührungsempfindliche Bildschirme, Transducerkartenlesegeräte, Magnet- oder Papierstreifenlesegeräte, Grafiktabletts, Grafikstifte, Sprach- oder Handschrifterkennungsgeräte oder sonstige allgemein bekannte Eingabegeräte, wie beispielsweise – natürlich – weitere Computer, gehören können. Schließlich kann die CPU 532 optional mit einem Computer- oder Telekommunikationsnetz, beispielsweise einem Nahbereichsnetz, einem Internet oder einem Intranet, mittels einer Netzwerkverbindung, wie sie allgemein mit 512 bezeichnet ist, verbunden sein. Es wird in Betracht gezogen, dass die CPU 532 mit einer solchen Netzwerkverbindung während der Durchführung der oben beschriebenen Verfahrensschritte Informationen aus dem Netz empfangen könnte oder Informationen an das Netz ausgeben könnte. Solche Informationen, die oft als eine Abfolge von Befehlen, die mittels der CPU 532 auszuführen sind, dargestellt sein können, können beispielsweise in Form eines in einer Trägerwelle verkörperten Computerdatensignals aus dem Netz empfangen werden und an das Netz ausgegeben werden. Die oben beschriebenen Vorrichtungen und Materialien sind dem Fachmann auf dem Gebiet der Computerhardware und -software bestens bekannt.
  • Wie zuvor angesprochen, kann eine virtuelle Maschine auf einem Computersystem 530 ausgeführt werden. 6 ist eine schaubildhafte Darstellung einer virtuellen Maschine, die von dem Computersystem 530 von 5 unterstützt wird und für die Implementierung der vorliegenden Erfindung geeignet ist. Wenn ein Computerprogramm, beispielsweise ein Computerprogramm, das in der JavaTM-Programmiersprache geschrieben ist, die von Sun Microsystems aus Mountain View, Kalifornien, entwickelt wurde, ausgeführt wird, so wird ein Quellcode 610 an einen Kompilierer 620 innerhalb einer Kompilierzeit-Umgebung 605 übermittelt. Der Kompilierer 620 übersetzt den Quellcode 610 in Byte-Codes 630. Im Allgemeinen wird der Quellcode 610 zu der Zeit in Byte-Codes 630 übersetzt, da der Quellcode 610 von einem Software-Entwickler geschaffen wird.
  • Die Byte-Codes 630 können im Allgemeinen über ein Netzwerk, beispielsweise das Netzwerk 512 von 5, reproduziert, heruntergeladen oder anderweitig verbreitet werden oder können in einer Speichervorrichtung wie beispielsweise dem primären Speicher 534 von 5 gespeichert werden. Bei der beschriebenen Ausführungsform sind die Byte-Codes 630 plattformunabhängig. Das heißt, die Byte-Codes 630 können auf im Wesentlichen jedem beliebigen Computersystem ausgeführt werden, auf dem eine geeignete virtuelle Maschine 640 läuft. Beispielsweise können in einer JavaTM-Umgebung die Byte-Codes 630 auf einem Computersystem ausgeführt werden, auf dem eine virtuelle JavaTM-Maschine läuft.
  • Die Byte-Codes 630 werden an eine Laufzeit-Umgebung 635 übermittelt, die eine virtuelle Maschine 640 enthält. Die Laufzeit-Umgebung 635 kann allgemein mittels eines Prozessors wie beispielsweise einer CPU 532 von 5 ausgeführt werden. Die virtuelle Maschine 640 enthält einen Kompilierer 642, einen Interpretierer 644 und ein Laufzeit-System 646. Die Byte-Codes 630 können allgemein entweder an den Kompilierer 642 oder den Interpretierer 644 übermittelt werden.
  • Wenn Byte-Codes 630 an den Kompilierer 642 übermittelt werden, so werden Verfahren, die in den Byte-Codes 630 enthalten sind, in Maschinenbefehle kompiliert, wie oben beschrieben. Wenn andererseits Byte-Codes 630 an den Interpretierer 644 übermittelt werden, so werden die Byte-Codes 630 in den Interpretierer 644 eingelesen – jeweils ein Byte-Code auf einmal. Der Interpretierer 644 führt dann die Operation, die von jedem Byte-Code vorgegeben ist, in dem Moment aus, wo jeder Byte-Code in den Interpretierer 644 eingelesen wird. Im Allgemeinen verarbeitet der Interpretierer 644 die Byte-Codes 630 und führt Operationen, die mit den Byte-Codes 630 verbunden sind, im Wesentlichen kontinuierlich aus.
  • Wenn ein Verfahren aus einem Betriebssystem 660 abgerufen wird und wenn festgestellt wird, dass das Verfahren als ein interpretiertes Verfahren aufzurufen ist, so kann das Laufzeit-System 646 das Verfahren vom Interpretierer 644 erhalten. Wenn andererseits festgestellt wird, dass das Verfahren als ein kompiliertes Verfahrens aufzurufen ist, so aktiviert das Laufzeit-System 646 den Kompilierer 642. Der Kompilierer 642 erzeugt dann Maschinenbefehle aus den Byte-Codes 630 und führt die Maschinensprachbefehle aus. Im Allgemeinen werden die Maschinensprachbefehle verworfen, wenn die virtuelle Maschine 640 beendet wird.
  • Im vorliegenden Text ist beschrieben worden, dass ein Verfahren der höchsten Priorität zum Kompilieren aus im Wesentlichen allen Verfahren in einer Ausführungsliste und einer Datenbankliste ausgewählt wird. Das Durchsuchen aller Verfahren in einer Ausführungsliste oder einer Datenbankliste oder in beiden zum Auffinden des Verfahrens mit der höchsten Kompilierungspriorität kann sich aber als teuer erweisen, wenn die Ausführungsliste sehr umfangreich ist. Darum kann bei einer Ausführungsform eine Teilmenge der Ausführungsliste anstatt im Wesentlichen der gesamten Ausführungsliste durchsucht werden, um ein Verfahren der höchsten Priorität zur Kompilierung zu identifizieren. Beispielsweise können die ersten "N" Kandidaten-Verfahren aus der Ausführungsliste durchsucht werden, um das Verfahren der höchsten Priorität in den ersten N Kandidaten-Verfahren zu identifizieren.
  • Wie zuvor angesprochen, kann eine Kompilierungspriorität von Verfahren wenigstens teilweise mittels der Aufrufzähler identifiziert werden. Die Aufrufzähler sind allgemein Zähler, die jedes Mal, wenn ein Verfahren bewertet wird, inkrementiert werden. Es versteht sich, dass bei einigen Ausführungsformen Aufrufzähler im Lauf der Zeit abgebaut können. Wenn beispielsweise ein Verfahren zum Beginn der Programmausführung wiederholt aufgerufen und zur Kompilierung vorgesehen wurde, aber nie wieder aufgerufen wird, so kann der Aufrufzähler abgebaut werden, um die Kompilierungspriorität des Verfahrens zu verringern. Nachdem der Aufrufzähler für ein Verfahren abgebaut wurde, beispielsweise exponentiell abgebaut wurde, ist das Kompilieren des Verfahrens möglicherweise nicht mehr ratsam.
  • Darum können solche Verfahren periodisch aus der Ausführungsliste herausgenommen werden.
  • Gleichermaßen wird während der Durchführung von Kompilierungen eine Feststellung getroffen, ob ein Verfahren, das zur Kompilierung vorgesehen ist, schon einmal kompiliert wurde. Alternativ können Verfahren, die bereits kompiliert wurden, nach Bedarf entweder aus der Ausführungsliste oder der Datenbankliste oder aus beiden entfernt werden. Im Allgemeinen kann der Aufwand, der mit dem Überprüfen der Ausführungsliste und der Datenbankliste für kompilierte Verfahren verbunden ist, relativ erheblich sein. Jedoch können kompilierte Verfahren periodisch – beispielsweise am Anfang eines Leerlaufzeitraums – entfernt werden.
  • Obgleich eine Ausführungsliste allgemein als eine Liste oder Schlange aus interpretierten Verfahren beschrieben wurde, die zu kompilieren sind, kann die Ausführungsliste auch kompilierte Verfahren enthalten, deren Rekompilierung so lange verzögert wird, bis ein Leerlaufzeitraum eintritt. Beispielsweise kann es sich in einem System mit zwei Ebenen von Kompilierern – sobald ein Verfahren kompiliert ist und wenn das Verfahren wiederholt ausgeführt wird – als wünschenswert erweisen, dass das Verfahren effizienter rekompiliert wird. Bei einem solchen System können die Verfahren, die für Rekompilierungen oder sekundäre Kompilierungen vorgesehen sind, in derselben Ausführungsliste enthalten sein wie interpretierte Verfahren, die für eine Kompilierung vorgesehen sind. Jedoch können die Verfahren, die für Rekompilierungen vorgesehen sind, andererseits auch in einer separaten Ausführungsliste enthalten sein.
  • Bei einer Ausführungsform kann die Ausführungsliste allgemein eine Arbeitsliste sein, die verzögerte Aufgaben zusätzlich zu – oder anstelle von – anstehenden Kompilierungen enthält. Solche Aufgaben können priorisiert werden. Es ist zu beachten, dass, wenn eine Aufgabe von der Arbeitsliste läuft und ein Interrupt empfangen wird, die Beendigung der Aufgabe zugelassen werden kann. Wenn die Aufgabe beispielsweise eine Datenmüllsammlung beinhaltet, so kann das Aussetzen eines Datenmüllsammlungsprozesses und ein Zurücktreten aus dem Datenmüllsammlungsprozess genauso teuer – wenn nicht gar teurer – als das Vollenden des Prozesses sein. Darum kann man die Datenmüllsammlung zu Ende arbeiten lassen. Aufgaben können außerdem allgemein ausgesetzt werden, wenn ein Interrupt empfangen wird. Darum sind die hier behandelten Beispiele als veranschaulichend und nicht als einschränkend anzusehen, und die Erfindung darf nicht auf die im vorliegenden Text angegebenen Details beschränkt werden, sondern kann innerhalb des Geltungsbereichs der angehängten Ansprüche – zusammen mit dem vollen Geltungsbereich ihrer Äquivalente – modifiziert werden.

Claims (20)

  1. Per Computer implementiertes Verfahren zum dynamischen Kompilieren von Verfahren während eines Leerlaufzeitraums in der Verarbeitung eines Computerprogramms, wobei das per Computer implementierte Verfahren Folgendes umfasst: Identifizieren (212) des Leerlaufzeitraums; Identifizieren (302) eines ersten interpretierbaren Verfahrens, das während des Leerlaufzeitraums aus mehreren interpretierbaren Verfahren ausgewählt wurde, wobei die mehreren Verfahren in dem Computerprogramm enthalten sind, wobei das Computerprogramm (144) unter Verwendung von sowohl interpretiertem Programmcode (154) als auch kompiliertem Programmcode (152) ausgeführt werden kann; und Initialisieren (306) einer Kompilierung des ersten Verfahrens, wobei die Initialisierung der Kompilierung des ersten Verfahrens während des Leerlaufzeitraums erfolgt.
  2. Per Computer implementiertes Verfahren nach Anspruch 1, wobei auf die mehreren Verfahren in einer ersten Liste, die dem Computerprogramm zugeordnet ist, verwiesen wird und es sich bei dem ersten Verfahren um ein Verfahren von oberster Priorität, das der ersten Liste zugeordnet ist, handelt.
  3. Per Computer implementiertes Verfahren nach Anspruch 1, wobei eine erste Gruppe von Verfahren, die aus den mehreren Verfahren ausgewählt wurde, einer ersten Liste zugeordnet ist und eine zweite Gruppe von Verfahren, die aus den mehreren Verfahren ausgewählt wurde, einer zweiten Liste zugeordnet ist, wobei die erste Liste während der Verarbeitung des Computerprogramms erstellt wird und die zweite Liste vor der Verarbeitung des Computerprogramms erstellt wird, wobei das Identifizieren des ersten Verfahrens beinhaltet: Auswählen des ersten Verfahrens als ein Verfahren von oberster Priorität aus der ersten Liste.
  4. Per Computer implementiertes Verfahren nach Anspruch 1, wobei eine erste Gruppe von Verfahren, die aus den mehreren Verfahren ausgewählt wurde, einer ersten Liste zugeordnet ist und eine zweite Gruppe von Verfahren, die aus den mehreren Verfahren ausgewählt wurde, einer zweiten Liste zugeordnet ist, wobei die erste Liste während der Verarbeitung des Computerprogramms erstellt wird und die zweite Liste vor der Verarbeitung des Computerprogramms erstellt wird, wobei das Identifizieren des ersten Verfahrens beinhaltet: Auswählen des ersten Verfahrens als ein Verfahren von oberster Priorität aus der zweiten Liste.
  5. Per Computer implementiertes Verfahren nach einem der vorangehenden Ansprüche, das des Weiteren Folgendes enthält: Feststellen (308), ob ein Interrupt durch das Computerprogramm nach der Initialisierung der Kompilierung des ersten Verfahrens empfangen wird; Fortsetzen (314) der Kompilierung des ersten Verfahrens für die Dauer eines vorgegebenen Zeitraums, wenn festgestellt wird, dass ein Interrupt empfangen wurde; Feststellen (316), ob die Kompilierung des ersten Verfahrens nach dem vorgegebenen Zeitraum abgeschlossen ist; und Abbrechen (318) der Kompilierung des ersten Verfahrens, wenn festgestellt wird, dass die Kompilierung des ersten Verfahrens nach dem vorgegebenen Zeitraum nicht abgeschlossen ist.
  6. Per Computer implementiertes Verfahren nach Anspruch 1, wobei der Leerlaufzeitraum ein Zeitraum geringer Aktivität innerhalb der Gesamtverarbeitung eines Computerprogramms ist.
  7. Per Computer implementiertes Verfahren nach Anspruch 1, das des Weiteren das Festellen (304) umfasst, ob das erste Verfahren bereits kompiliert wurde, wobei die Feststellung während des Leerlaufzeitraums getroffen wird.
  8. Per Computer implementiertes Verfahren nach Anspruch 7, das des Weiteren Folgendes beinhaltet: Identifizieren eines zweiten interpretierbaren Verfahrens, das während des Leerlaufzeitraums aus den mehreren interpretierbaren Verfahren ausgewählt wurde, wenn festgestellt wird, dass das erste Verfahren bereits kompiliert wurde; Feststellen, ob das zweite Verfahren bereits kompiliert wurde, wobei die Feststellung, ob das zweite Verfahren bereits kompiliert wurde, während des Leerlaufzeitraums getroffen wird; und Initialisieren einer Kompilierung des zweiten Verfahrens während des Leerlaufzeitraums, wenn festgestellt wird, dass das zweite Verfahren noch nicht kompiliert wurde.
  9. Per Computer implementiertes Verfahren nach Anspruch 1, das des Weiteren Folgendes beinhaltet: Ermitteln eines Prioritätswertes für jedes der mehreren Verfahren, wobei das erste Verfahren anhand des Prioritätswertes für das erste Verfahren identifiziert wird.
  10. Per Computer implementiertes Verfahren nach Anspruch 9, wobei das Ermitteln des Prioritätswertes für jedes der mehreren Verfahren das Verarbeiten eines Aufrufzählers, der jedem der mehreren Verfahren zugeordnet ist, während des Zeitraums geringer Aktivität beinhaltet.
  11. Per Computer implementiertes Verfahren nach Anspruch 9, wobei das Ermitteln des Prioritätswertes für jedes der mehreren Verfahren das Schätzen einer Kompilierungsdauer für jedes der mehreren Verfahren während des Zeitraums geringer Aktivität beinhaltet.
  12. Per Computer implementiertes Verfahren nach Anspruch 5, das des Weiteren Folgendes beinhaltet: Zuendeführen (312) der Kompilierung des ersten Verfahrens, wenn festgestellt wird (308), dass kein Interrupt empfangen wurde; Identifizieren eines zweiten interpretierbaren Verfahrens, das während des Zeitraums geringer Aktivität aus den mehreren interpretierbaren Verfahren ausgewählt wurde; Feststellen, ob das zweite Verfahren bereits während des Zeitraums geringer Aktivität kompiliert wurde; und Initialisieren einer Kompilierung des zweiten Verfahrens während des Zeitraums geringer Aktivität, wenn festgestellt wird, dass das zweite Verfahren noch nicht kompiliert wurde.
  13. Per Computer implementiertes Verfahren nach Anspruch 1, das des Weiteren das Zuendeführen der Kompilierung des ersten Verfahrens beinhaltet, wenn ein Interrupt empfangen wird.
  14. Per Computer implementiertes Verfahren nach Anspruch 1, das des Weiteren das Aussetzen der Kompilierung des ersten Verfahrens beinhaltet, wenn ein Interrupt empfangen wird.
  15. Computersystem zum dynamischen Kompilieren von Verfahren während eines Leerlaufzeitraums in der Verarbeitung eines Computerprogramms, wobei das Computersystem Folgendes umfasst: einen Mechanismus zum Identifizieren des Leerlaufzeitraums; einen Mechanismus zum Identifizieren eines ersten interpretierbaren Verfahrens, das während des Leerlaufzeitraums aus mehreren interpretierbaren Verfahren ausgewählt wurde, wobei die mehreren Verfahren in dem Computerprogramm enthalten sind und das Computerprogramm unter Verwendung von sowohl interpretiertem Programmcode als auch kompiliertem Programmcode ausgeführt werden kann; und einen Kompilierer zum Initialisieren einer Kompilierung des ersten Verfahrens während des Leerlaufzeitraums.
  16. Computersystem nach Anspruch 15, das des Weiteren Folgendes enthält: eine erste Liste, die dafür konfiguriert ist, auf eine erste Gruppe der mehreren Verfahren zu verweisen, wobei die erste Liste dem Computerprogramm zugeordnet ist und es sich bei dem ersten Verfahren um ein Verfahren von oberster Priorität, das der ersten Liste zugeordnet ist, handelt; und eine zweite Liste, die dafür konfiguriert ist, auf eine zweite Gruppe der mehreren Verfahren zu verweisen, wobei die zweite Liste vor der Verarbeitung des Computerprogramms erstellt wird und die erste Liste während der Verarbeitung des Computerprogramms erstellt wird.
  17. Computersystem nach Anspruch 15, das des Weiteren Folgendes enthält: einen Interruptprozessor, der dafür konfiguriert ist, ein Interruptsignal während der Kompilierung des ersten Verfahrens zu erhalten, wobei der Interruptprozessor mit dem Kompilierer im Datenaustausch steht, wobei der Kompilierer des Weiteren dafür konfiguriert ist, in Reaktion auf ein Signal von dem Interruptprozessor die Kompilierung des ersten Verfahrens für eine vorgegebene Zeitdauer fortzuführen; und einen Abbrechmechanismus, wobei der Abbrechmechanismus mit dem Kompilierer im Datenaustausch steht, wobei der Abbrechmechanismus dafür konfiguriert ist, die Kompilierung des ersten Verfahrens abzubrechen.
  18. Computersystem nach einem der Ansprüche 15 bis 17, das des Weiteren Folgendes enthält: einen Diagnosemechanismus, wobei der Diagnosemechanismus dafür konfiguriert ist festzustellen, wann das erste Verfahren kompiliert ist.
  19. Computerprogrammcode, der durch eine Datenverarbeitungsvorrichtung ausgeführt werden kann, um das Verfahren nach einem der Ansprüche 1 bis 14 bereitzustellen, oder der durch das Computersystem nach einem der Ansprüche 15 bis 18 ausgeführt werden kann.
  20. Computerprogrammprodukt, umfassend ein computerlesbares Speichermedium, auf dem ein Computerprogrammcode nach Anspruch 19 gespeichert ist.
DE69834230T 1997-10-06 1998-09-24 Verfahren und Gerät zur Optimierung des Programmablaufs von Anwendungen Expired - Lifetime DE69834230T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/944,735 US5970249A (en) 1997-10-06 1997-10-06 Method and apparatus for performing byte-code optimization during pauses
US944735 1997-10-06

Publications (2)

Publication Number Publication Date
DE69834230D1 DE69834230D1 (de) 2006-05-24
DE69834230T2 true DE69834230T2 (de) 2006-08-31

Family

ID=25481974

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69834230T Expired - Lifetime DE69834230T2 (de) 1997-10-06 1998-09-24 Verfahren und Gerät zur Optimierung des Programmablaufs von Anwendungen

Country Status (6)

Country Link
US (2) US5970249A (de)
EP (1) EP0908818B1 (de)
JP (1) JPH11237989A (de)
KR (1) KR100589798B1 (de)
CN (1) CN100392595C (de)
DE (1) DE69834230T2 (de)

Families Citing this family (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6960133B1 (en) 2000-08-28 2005-11-01 Igt Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays)
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6792600B1 (en) * 1998-05-14 2004-09-14 International Business Machines Corporation Method and apparatus for just in time compilation of instructions
US6141793A (en) * 1998-04-01 2000-10-31 Hewlett-Packard Company Apparatus and method for increasing the performance of interpreted programs running on a server
US6405367B1 (en) 1998-06-05 2002-06-11 Hewlett-Packard Company Apparatus and method for increasing the performance of Java programs running on a server
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
JP2000122875A (ja) * 1998-10-19 2000-04-28 Internatl Business Mach Corp <Ibm> 例外処理方法およびシステム
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6324687B1 (en) * 1998-12-03 2001-11-27 International Business Machines Corporation Method and apparatus to selectively control processing of a method in a java virtual machine
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
GB2344907A (en) * 1998-12-19 2000-06-21 Int Computers Ltd Instruction translation and execution mechanism
US6327702B1 (en) * 1998-12-30 2001-12-04 Microsoft Corporation Generating a compiled language program for an interpretive runtime environment
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6507946B2 (en) * 1999-06-11 2003-01-14 International Business Machines Corporation Process and system for Java virtual method invocation
GB2352914A (en) * 1999-08-03 2001-02-07 Sony Uk Ltd Data broadcast method
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
JP3605327B2 (ja) 1999-11-18 2004-12-22 富士通株式会社 プログラム実行装置
DE19963832A1 (de) * 1999-12-30 2001-07-05 Ericsson Telefon Ab L M Programmprofilierung
US6865730B1 (en) * 2000-03-08 2005-03-08 International Business Machines Corporation Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading
US6769985B1 (en) 2000-05-31 2004-08-03 Igt Gaming device and method for enhancing the issuance or transfer of an award
US7699699B2 (en) 2000-06-23 2010-04-20 Igt Gaming device having multiple selectable display interfaces based on player's wagers
US7695363B2 (en) 2000-06-23 2010-04-13 Igt Gaming device having multiple display interfaces
US7240342B1 (en) * 2000-06-30 2007-07-03 Intel Corporation User transparent continuous compilation
US6973646B1 (en) * 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
US6935955B1 (en) 2000-09-07 2005-08-30 Igt Gaming device with award and deduction proximity-based sound effect feature
KR20020028814A (ko) * 2000-10-10 2002-04-17 나조미 커뮤니케이션즈, 인코포레이티드 마이크로코드 엔진을 이용한 자바 하드웨어 가속기
US6739973B1 (en) 2000-10-11 2004-05-25 Igt Gaming device having changed or generated player stimuli
US6964039B2 (en) * 2000-12-13 2005-11-08 Esmertec Ag Method to create optimized machine code through combined verification and translation of JAVA™ bytecode
US7040983B2 (en) 2001-03-21 2006-05-09 Igt Gaming device having a multi-round, multi-characteristic matching game
US6978451B2 (en) * 2001-05-31 2005-12-20 Esmertec Ag Method for fast compilation of preverified JAVA bytecode to high quality native machine code
US7901291B2 (en) 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US6848996B2 (en) 2001-10-15 2005-02-01 Igt Gaming device with sound recording changes associated with player inputs
US7666098B2 (en) 2001-10-15 2010-02-23 Igt Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes
US7708642B2 (en) 2001-10-15 2010-05-04 Igt Gaming device having pitch-shifted sound and music
US6993755B1 (en) * 2001-10-24 2006-01-31 Sun Microsystems, Inc. Dynamic compilation control
CA2359862A1 (en) * 2001-10-24 2003-04-24 Ibm Canada Limited - Ibm Canada Limitee Using identifiers and counters for controlled optimization compilation
US6996814B2 (en) 2001-11-14 2006-02-07 Sun Microsystems, Inc. Method and apparatus for dynamically compiling byte codes into native code
US20040088690A1 (en) * 2002-08-27 2004-05-06 Hayim Shaul Method for accelerating a computer application by recompilation and hardware customization
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
JP4713820B2 (ja) * 2003-05-28 2011-06-29 パナソニック株式会社 プログラム実行制御装置、プログラム実行制御方法
US7789748B2 (en) * 2003-09-04 2010-09-07 Igt Gaming device having player-selectable music
US7105736B2 (en) 2003-09-09 2006-09-12 Igt Gaming device having a system for dynamically aligning background music with play session events
US8954420B1 (en) 2003-12-31 2015-02-10 Google Inc. Methods and systems for improving a search ranking using article information
US20050149498A1 (en) * 2003-12-31 2005-07-07 Stephen Lawrence Methods and systems for improving a search ranking using article information
US7788657B2 (en) * 2004-02-27 2010-08-31 Tvworks, Llc Targeted runtime compilation
US8631076B1 (en) 2004-03-31 2014-01-14 Google Inc. Methods and systems for associating instant messenger events
US8386728B1 (en) 2004-03-31 2013-02-26 Google Inc. Methods and systems for prioritizing a crawl
US7333976B1 (en) 2004-03-31 2008-02-19 Google Inc. Methods and systems for processing contact information
US8275839B2 (en) * 2004-03-31 2012-09-25 Google Inc. Methods and systems for processing email messages
US7680888B1 (en) 2004-03-31 2010-03-16 Google Inc. Methods and systems for processing instant messenger messages
US7725508B2 (en) 2004-03-31 2010-05-25 Google Inc. Methods and systems for information capture and retrieval
US7581227B1 (en) 2004-03-31 2009-08-25 Google Inc. Systems and methods of synchronizing indexes
US7941439B1 (en) 2004-03-31 2011-05-10 Google Inc. Methods and systems for information capture
US8346777B1 (en) 2004-03-31 2013-01-01 Google Inc. Systems and methods for selectively storing event data
US7412708B1 (en) * 2004-03-31 2008-08-12 Google Inc. Methods and systems for capturing information
US8099407B2 (en) * 2004-03-31 2012-01-17 Google Inc. Methods and systems for processing media files
US8161053B1 (en) 2004-03-31 2012-04-17 Google Inc. Methods and systems for eliminating duplicate events
KR100725386B1 (ko) * 2004-09-25 2007-06-07 삼성전자주식회사 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기
US8043155B2 (en) 2004-10-18 2011-10-25 Igt Gaming device having a plurality of wildcard symbol patterns
US20060212840A1 (en) * 2005-03-16 2006-09-21 Danny Kumamoto Method and system for efficient use of secondary threads in a multiple execution path processor
US9262446B1 (en) 2005-12-29 2016-02-16 Google Inc. Dynamically ranking entries in a personal data book
JP5167589B2 (ja) * 2006-02-13 2013-03-21 富士通株式会社 アプリケーションサーバ装置および仮想マシンプログラム
US7784041B2 (en) * 2006-03-30 2010-08-24 Oracle America, Inc. Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation
US8799876B2 (en) * 2006-09-29 2014-08-05 Intel Corporation Method and apparatus for assigning subroutines
US8146065B2 (en) 2007-08-13 2012-03-27 International Business Machines Corporation Running time of short running applications by effectively interleaving compilation with computation in a just-in-time environment
US20090125519A1 (en) * 2007-11-13 2009-05-14 Intel Corporation Device, system, and method for regulating software lock elision mechanisms
KR20090098500A (ko) * 2008-03-14 2009-09-17 삼성전자주식회사 가상 머신의 유휴 구간 검사 장치 및 방법, 그리고 그방법을 수행하기 위한 컴퓨터 프로그램
US8591308B2 (en) 2008-09-10 2013-11-26 Igt Gaming system and method providing indication of notable symbols including audible indication
JP5093509B2 (ja) * 2008-10-28 2012-12-12 日本電気株式会社 Cpuエミュレーションシステム、cpuエミュレーション方法及びcpuエミュレーションプログラム
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US8677329B2 (en) * 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
JP2011192239A (ja) * 2010-03-17 2011-09-29 Sony Corp 記憶装置および記憶システム
JP2011192240A (ja) * 2010-03-17 2011-09-29 Sony Corp 記憶装置および記憶システム
CN102610002B (zh) * 2011-01-20 2015-11-25 鸿富锦精密工业(深圳)有限公司 机台状态侦测系统及方法
JP2013061810A (ja) * 2011-09-13 2013-04-04 Fujitsu Ltd 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム
US8460090B1 (en) 2012-01-20 2013-06-11 Igt Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events
US8740689B2 (en) 2012-07-06 2014-06-03 Igt Gaming system and method configured to operate a game associated with a reflector symbol
US9245407B2 (en) 2012-07-06 2016-01-26 Igt Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines
US9996325B2 (en) 2013-03-06 2018-06-12 Qualcomm Incorporated Dynamic reconfigurable compiler
US9027007B2 (en) * 2013-03-06 2015-05-05 Qualcomm Incorporated Reducing excessive compilation times
JP6127639B2 (ja) 2013-03-26 2017-05-17 富士通株式会社 プログラム実行制御プログラム、プログラム実行制御方法
US9009691B1 (en) * 2013-07-12 2015-04-14 Google Inc. Using an inline stack to improve performance of an applications binary
US9192857B2 (en) 2013-07-23 2015-11-24 Igt Beat synchronization in a game
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
CN105718298B (zh) * 2014-12-03 2019-02-15 龙芯中科技术有限公司 动态编译方法及装置
CN104951335B (zh) * 2015-05-22 2019-01-04 小米科技有限责任公司 应用程序安装包的处理方法及装置
US9947170B2 (en) 2015-09-28 2018-04-17 Igt Time synchronization of gaming machines
CN105373430A (zh) * 2015-10-13 2016-03-02 惠州Tcl移动通信有限公司 一种动态分配编译机的系统及其方法
US11029929B2 (en) * 2019-01-24 2021-06-08 Red Hat, Inc. Using emulation to improve startup time for just-in-time compilation
CN112379984A (zh) * 2020-11-16 2021-02-19 神州融安科技(北京)有限公司 执行任务的方法、设备、电子设备及计算机可读存储介质
KR20230019619A (ko) * 2021-08-02 2023-02-09 삼성전자주식회사 어플리케이션 최적화 방법 및 이를 지원하는 장치

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5694603A (en) * 1982-09-28 1997-12-02 Reiffin; Martin G. Computer memory product with preemptive multithreading software
US4658351A (en) * 1984-10-09 1987-04-14 Wang Laboratories, Inc. Task control means for a multi-tasking data processing system
US5394537A (en) * 1989-12-13 1995-02-28 Texas Instruments Incorporated Adaptive page placement memory management system
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5995997A (en) * 1997-05-02 1999-11-30 Microsoft Corporation Apparatus and methods for optimally allocating currently available computer resources to future task instances versus continued execution of current task instances
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US6009517A (en) * 1997-10-06 1999-12-28 Sun Microsystems, Inc. Mixed execution stack and exception handling
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs

Also Published As

Publication number Publication date
KR19990036882A (ko) 1999-05-25
US5970249A (en) 1999-10-19
EP0908818A3 (de) 2001-06-20
CN100392595C (zh) 2008-06-04
CN1234552A (zh) 1999-11-10
US6240548B1 (en) 2001-05-29
EP0908818B1 (de) 2006-04-19
KR100589798B1 (ko) 2006-10-25
EP0908818A2 (de) 1999-04-14
JPH11237989A (ja) 1999-08-31
DE69834230D1 (de) 2006-05-24

Similar Documents

Publication Publication Date Title
DE69834230T2 (de) Verfahren und Gerät zur Optimierung des Programmablaufs von Anwendungen
US11379272B2 (en) Autoscaling using file access or cache usage for cluster machines
DE69926602T2 (de) Hybrider Rechtzeitkompiler der minimale Betriebsmittel verwendet
DE10050684B4 (de) Verfahren und System zur periodischen Ablaufverfolgung für Aufrufsequenzen zwischen Routinen
DE60208710T2 (de) Plattformunabhängige im-voraus-kompilierung
DE60035745T2 (de) Verfahren zum bei Bedarf Laden und Ausführen einer Netzwerkanwendung
DE10393481B4 (de) Verfahren und Vorrichtung zum Management einer Cache-Umgehung
US7010596B2 (en) System and method for the allocation of grid computing to network workstations
DE69822935T2 (de) Vorrichtung und Verfahren zur dynamischen Regelung der Betriebsmittelzuweisung in einem Computersystem
DE19728726B4 (de) Robotercontroller und dessen Steuerverfahren
US6304880B1 (en) Automated reclamation scheduling override in a virtual tape server
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
US6237141B1 (en) Method and apparatus for dynamically optimizing byte-coded programs
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE69724322T2 (de) Verfahren und Anordnung zum frühzeitigen Einfügen von Assemblercode zwecks Optimierung
EP2400387B1 (de) Verfahren zur Performanceverbesserung von Computern
DE102016214786A1 (de) Anwendungsprofiling-Jobmanagement-System, -Programm und -Verfahren
DE112004001887B4 (de) Optimierung der SMI-Behandlung und -Initialisierung
DE2243956A1 (de) Speicherprogrammierte datenverarbeitungsanlage
DE102006046129A1 (de) Vorrichtung, System und Verfahren für einen ständigen Thread auf Benutzerebene
US20050166207A1 (en) Self-optimizing computer system
CN109684000B (zh) App数据显示方法、装置、设备及计算机可读存储介质
US20010052117A1 (en) Method and apparatus for performing byte-code optimization during pauses
DE102006008684A1 (de) Verfahren und System zum Stack-Cachen
DE19934067A1 (de) Verfahren, Vorrichtung und Computerprogrammprodukt für stapelspeicherbezogene Ausnahmeunterbrechungen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition