-
GEBIET DER ERFINDUNG
-
Die vorliegende Erfindung betrifft allgemein ein Ausführen von Computeranwendungen und genauer ein Verfahren und ein System zum Ausführen einer Vielzahl von Instanzen einer Anwendung.
-
BESCHREIBUNG DES STANDES DER TECHNIK
-
Bei Cloud-Computing handelt es sich um einen aufkommenden Netzwerkdienstmodus. Ein Analysebericht von IDS hebt hervor, dass im Jahr 2009 unter den weltweiten IT-Ausgaben von 359 Milliarden $ eine Summe von 17 Milliarden $ aus Investitionen in Cloud-Computing stammt. Andere Studien weisen zudem darauf hin, dass zwei Drittel der Unternehmen vorhaben, die Nutzung öffentlicher Clouds zu erweitern.
-
Eine „mandantenfähige” (multi-tenancy) Architektur ist die verbreitetste Architektur beim Cloud-Computing, und „Mandantenfähigkeit” entlehnt und entwickelt viele Konzepte aus dem Host-Computing und führt die Konzepte in das System von x86-Servern ein und erweitert die ursprünglichen Konzepte enorm, so dass Tausende von „Mandanten” innerhalb und außerhalb von Unternehmen unterstützt werden. Bei solchen „Mandanten” kann es sich um jede beliebige Anwendung (entweder innerhalb von Unternehmen oder außerhalb von Unternehmen) in jedem beliebigen Unternehmen handeln, das seine eigenen Sicherheitsanforderungen und eine dedizierte virtuelle Datenverarbeitungsumgebung besitzt, und die Umgebung kann mehrere oder alle Ebenen der IT-Architektur des Unternehmens vom Datenspeicher bis hin zur Benutzerschnittstelle beinhalten. Tatsächlich sind alle interaktiven Anwendungen naturgemäß auf mehrere Benutzer oder „Mandantenfähigkeit” ausgerichtet.
-
„Mandantenfähigkeit” bedeutet kurz ausgedrückt, dass eine einzige Software-Instanz eine Vielzahl von Organisationen (oder Benutzern) bedienen kann. Eine Software, die Mandantenfähigkeit unterstützt, muss es durch ihre Gestaltung jeder die Software verwendenden Organisation ermöglichen, eine separate virtuelle Instanz zu verwenden und in der Lage zu sein, die virtuelle Instanz anzupassen. Der Vorteil von Mandantenfähigkeit liegt im Verringern der Gesamt-Inanspruchnahme von Ressourcen sowie der Kosten des Ausführens einer Anwendung durch gemeinsames Nutzen einer Software-Instanz durch eine Vielzahl von Organisationen; da zudem alle Organisationen denselben Satz von Kerncode gemeinsam nutzen, sind das Aktualisieren und die Entwicklung der Software einfacher; des Weiteren können durch Verwenden der mandantenfähigen Architektur physische Ressourcen und Softwareressourcen verringert, die Verwaltung vereinfacht und die Effizienz verbessert werden.
-
Um den Sicherheits- und Isolationsanforderungen mehrerer Mandanten (Benutzer) zu genügen, muss der Administrator des Cloud-Computing in manchen Cloud-Computing-Umgebungen für jeden Benutzer eine separate Instanz der Anwendung erzeugen. Obwohl eine Vielzahl von Instanzen der Anwendung auf demselben grundlegenden Code ausgeführt werden, ist es derzeit schwierig, denselben grundlegenden Code zu verwenden, wodurch unnötige Inanspruchnahmen von Ressourcen verursacht werden, z. B. der aufgrund mehrmaligen Ladens desselben Codes belegte Arbeitsspeicherplatz; darüber hinaus wird bei unterschiedlichen Instanzen der Anwendung dieselbe globale Datenstruktur verwendet, wodurch wiederholte Belegung des Datenspeicherplatzes verursacht wird usw.
-
Bei der derzeitigen „mandantenfähigen” Architektur, z. B. für eine JavaTM-Anwendung, wird dieses Problem durch Replizieren der JVM gelöst. Bei diesem Verfahren wird die vorhandene JVM repliziert, um eine neue replizierte JVM erneut zu starten und die Arbeitsspeicherseiten gemeinsam zu nutzen, und eine weitere gleiche Java-Anwendung auf der replizierten JVM auszuführen. Bei diesem Verfahren erfolgt jedoch eine gemeinsame Nutzung auf Prozessebene mit einer groben Granularität der gemeinsamen Nutzung und einer begrenzten Speicherplatzeinsparung. (Java und alle auf Java gestützten Marken und Logos sind Marken oder eingetragen Marken von Oracle und/oder seinen verbundenen Unternehmen).
-
In
US 7 426 720 werden ein System und ein Verfahren zum dynamischen Vorladen von Klassen durch Klonen von Arbeitsspeicherplatz eines Haupt-Laufzeitsystemprozesses offenbart. Ein Haupt-Laufzeitsystemprozess wird ausgeführt. Eine Darstellung mindestens einer Klasse wird von einer als objektorientierter Programmcode bereitgestellten Quelldefinition bereitgestellt. Die Darstellung wird als eine Klassendefinition auf einem Arbeitsspeicherplatz des Haupt-Laufzeitsystemprozesses interpretiert und instanziiert. Der Arbeitsspeicherplatz wird als Reaktion auf eine Prozessanfrage als ein untergeordneter Laufzeitsystemprozess geklont, und der untergeordnete Laufzeitsystemprozess wird ausgeführt und erbt den Arbeitsspeicherzustand des übergeordneten Prozesses, der die Datenstrukturen und den Zustand wiedergibt, die den vorgeladenen Klassen entsprechen. (Siehe Zusammenfassung und Spalten 4 und 5, Zeilen 47 bis 6.)
-
In
US 4 742 450 wird ein Verfahren zum Ermöglichen eines Austausches von Daten in einer UNIX*-Datei zwischen zwei gleichzeitig auf zwei virtuellen Maschinen ausgeführten UNIX-Prozessoren in einem Datenverarbeitungssystem des Typs virtueller Maschinen mit seitensegmentiertem virtuellem Arbeitsspeicher offenbart. Ein Befehl „Shared Copy-On-Write” (SCOW) wird für das Betriebssystem des UN IX-Typs erstellt, der bei Ausführen als Reaktion auf einen Systemaufruf von einem einzelnen Prozess veranlasst, die angegebene UNIX-Datei einem eindeutigen Segment des virtuellen Arbeitsspeichers zuzuordnen. Eine Zuordnungsknoten-Datenstruktur wird zum Speichern der ID des eindeutigen Segments und zum Pflegen eines Zählwertes der Anzahl von Benutzern eingerichtet, die das eindeutige Segment gemeinsam nutzen. Ein Systemaufruf zum SCOW-Befehl durch den zweiten Prozess, der dieselbe UNIX-Datei einbezieht, prüft die Zuordnungsknoten-Datenstruktur, um zu ermitteln, ob die Datei aktuell für den SCOW-Modus zugeordnet ist. Nachfolgende Anweisungen in den Anwendungsprogrammen, die parallel auf den virtuellen Maschinen ausgeführt werden, arbeiten an der Kopie der Datei im eindeutigen Segment, so dass alle Daten, die geändert, d. h. durch einen Prozess geschrieben werden, verfügbar sind, um durch den zweiten Prozess gelesen zu werden. FNT UNIX ist eine Marke von AT&T. (Siehe Zusammenfassung und Spalten 4 und 5, Zeilen 33 bis 2.)
-
In
US 7 536 525 werden ein System und ein Verfahren zum Klonen während der Laufzeit (hot cloning) in einem verteilten Netzwerk offenbart. In einer Ausführungsform beinhaltet ein Verfahren zum Klonen einer virtuellen Maschine von einem Quellsystem auf ein Zielsystem ein Einfrieren von Schreibvorgängen auf eine Datenspeicherdatei mit Speicherblöcken, so dass nachfolgende Schreibvorgänge neue Speicherblöcke für die ursprüngliche virtuelle Maschine erzeugen. Das Verfahren beinhaltet weiterhin ein Einfrieren von Schreibvorgängen auf einen Arbeitsspeicherinhalt, so dass nachfolgende Schreibvorgänge in Pufferspeichern gespeichert werden. Das Verfahren beinhaltet weiterhin ein Kopieren des Arbeitsspeicherinhalts auf das Zielsystem, wobei der kopierte Arbeitsspeicherinhalt einen Klon erzeugt. Das Verfahren beinhaltet weiterhin ein Auftauen des Arbeitsspeicherinhalts durch Zusammenführen der in den Pufferspeichern gespeicherten Schreibvorgänge und Auftauen der Schreibvorgänge auf die Datenspeicherdatei, so dass nachfolgende Schreibvorgänge normal stattfinden. Das Verfahren beinhaltet weiterhin ein Konfigurieren des Klons auf der Grundlage des Zielsystems. Das Verfahren beinhaltet weiterhin ein Erzeugen eines neuen Speicherblocks für alle Schreibvorgänge auf die Datenspeicherdatei, wobei der neue Speicherblock nicht gemeinsam genutzt wird. (Siehe Zusammenfassung, Zeilen 20 bis 40 und Spalten 6 und 7, Zeilen 52 bis 3.)
-
In
US 7 657 888 wird ein Verfahren zum Steigern der Effizienz der Verarbeitung virtueller Maschinen offenbart. Eine übergeordnete virtuelle Maschine wird auf einem Host-Computer bereitgestellt. Die übergeordnete virtuelle Maschine ist zeitweise oder dauerhaft ausgesetzt. Eine untergeordnete virtuelle Maschine wird an einem neuen Ort erstellt, indem die übergeordnete virtuelle Maschine aufgespalten wird. Die untergeordnete virtuelle Maschine enthält anfänglich unter Umständen nicht alle gespeicherten Daten, die der übergeordneten virtuellen Maschine zugehörig sind. (Siehe Zusammenfassung, Spalte 4, Zeilen 44 bis 56 und Spalte 5, Zeilen 4 bis 40.)
-
In
WO 2007/036072 werden ein Verfahren und eine Vorrichtung zum beschleunigten Starten virtueller Maschinen (VM) in einer VM-Cluster-Umgebung offenbart. In einer Ausführungsform wird mindestens eine virtuelle Maschine innerhalb einer Host-Plattform gestartet. Nach dem Initialisieren kann eine VM einen Hyperaufruf an einen VM-Monitor (VMM) einer VM-Host-Plattform ausgeben. Als Reaktion kann der VMM ein Laufzeit-Abbild (image) der VM erfassen. In einer Ausführungsform lädt der VMM das Laufzeit-Abbild der VM innerhalb eines Knotens der Host-Plattform als eine untergeordnete VM. In einer alternativen Ausführungsform gibt der VMM einen VM-Klonbefehl an eine VMM einer nächsten Host-Plattform einschließlich des Laufzeit-Abbilds der VM aus. Als Reaktion lädt der VMM der nächsten Host-Plattform das Laufzeit-Abbild der ersten VM innerhalb eines Knotens der zweiten Host-Plattform als eine geklonte VM. (Siehe Seiten 11 und 12, Abschnitte [38 bis 41].)
-
In
US 2010/0223613 werden ein System und ein Verfahren zum Isolieren von innerhalb einer Datenverarbeitungseinheit ausgeführten Prozessen offenbart. Ein Prozess wird auf eine virtuelle Maschine geladen, die unter der Steuerung eines Hypervisor betrieben wird, der zum Datenaustausch mit einem Betriebssystemkernel verbunden ist. Ein Teilsatz einer Anwendungsprogrammierschnittstelle (application programming interface (API)) wird der virtuellen Maschine angeboten, wodurch der Prozess in die Lage versetzt wird, über den Teilsatz der API eine Verbindung mit dem Betriebssystemkernel herzustellen. Der Prozess wird dann auf der virtuellen Maschine ausgeführt. (Siehe Zusammenfassung und Seite 4, Abschnitte 37 und 38.)
-
In
US 7 421 698 werden ein System und ein Verfahren zum dynamischen und dauerhaften Verfolgen inkrementeller Profilerstellungsdaten in einer Umgebung einer Anwendung des Prozessklonens offenbart. Ein Haupt-Laufzeitsystemprozess wird ausgeführt. Ein Arbeitsspeicherplatz des Haupt-Laufzeitsystemprozesses wird als ein untergeordneter Laufzeitsystemprozess als Reaktion auf eine Prozessanfrage geklont. Der unterordnete Laufzeitsystemprozess wird ausgeführt. Für das Ausführen des untergeordneten Laufzeitsystemprozesses wird durch inkrementelles Erfassen von Profilerstellungsdaten ein Profil erstellt. Die Profile des untergeordneten Laufzeitsystemprozesses werden dem Haupt-Laufzeitsystemprozess zum Vorteil nachfolgender untergeordneter Laufzeitsystemprozesse wieder zugeführt. In einer weiteren Ausführungsform werden die Profile der untergeordneten Laufzeitsystemprozesse in einem dauerhaften Datenspeicher zur Verwendung durch den Haupt-Laufzeitsystemprozess beim nächsten Hochfahren aufbewahrt. (Siehe Zusammenfassung und Spalten 2 und 3, Zeilen 51 bis 18.)
-
In „Cloneable JVM: A new approach to start isolated Java Applications Faster" von Kawachiya, Ogata, Silva, Hideaki, Nakatani und Nakatani wird ein Ansatz offenbart, bei dem der Startaufwand bei Java entbehrlich wird. (Siehe Zusammenfassung und auch Abschnitt 3.1.)
-
KURZDARSTELLUNG DER ERFINDUNG
-
Daher werden ein neues Verfahren, ein System und ein Computerprogramm zum Ausführen einer Vielzahl von Instanzen einer Anwendung gemäß einer Ausführungsform der vorliegenden Erfindung bereitgestellt, um den durch die Anwendung belegten Datenspeicherplatz einzusparen.
-
Gemäß einem Aspekt der vorliegenden Erfindung wird ein Verfahren zum Ausführen einer Vielzahl von Instanzen einer Anwendung bereitgestellt, wobei das Verfahren aufweist:
Starten eines Ausführens einer Stamminstanz der Anwendung, wobei die Stamminstanz mindestens einen Thread beinhaltet; als Reaktion darauf, dass ein Thread der Stamminstanz beim Ausführen zu einem zuvor festgelegten Einfrierpunkt in der Anwendung gelangt, Anhalten des Ausführens aller Threads der Stamminstanz; als Reaktion auf ein Starten eines Ausführens einer Instanz der Anwendung, Replizieren des Ausführungszustandes aller Threads der Stamminstanz als den Ausführungszustand aller Threads der Instanz; und Fortfahren, alle Threads der Instanz der Anwendung auszuführen.
-
In einer Ausführungsform beinhaltet der Ausführungszustand mindestens: den aktuellen Stapel, die Werte von Registern und die aktuelle Anweisung eines Thread.
-
In einer Ausführungsform enthält der aktuelle Stapel des Ausführungszustands eine Referenz zu einem Instanzobjekt in der Instanz, wobei die Referenz zum Instanzobjekt so initialisiert ist, dass sie auf das Stamminstanzobjekt verweist.
-
In einer Ausführungsform weist das Fortfahren mit dem Ausführen aller Threads der Instanz der Anwendung auf: Empfangen einer Schreiboperation auf ein Feld eines Instanzobjekts; als Reaktion darauf, dass eine Referenz zum Instanzobjekt auf ein Stamminstanzobjekt verweist: Zuordnen eines Datenspeicherbereichs für das Instanzobjekt; Verweisen der Referenz zum Instanzobjekt auf den Datenspeicherbereich; Ausführen der Schreiboperation in dem Datenspeicherbereich.
-
In einer Ausführungsform weist das Verfahren weiterhin auf: als Reaktion darauf, dass die Referenz zu einem Instanzobjekt nicht auf ein Stamminstanzobjekt verweist, Ausführen der Schreiboperation im Datenspeicherbereich, auf den die Referenz zum Instanzobjekt verweist.
-
In einer Ausführungsform weist das Fortfahren mit dem Ausführen aller Threads der Instanz der Anwendung auf: Empfangen einer Schreiboperation auf ein Feld eines Instanzobjektes; als Reaktion darauf, dass ein entsprechendes Feld eines Stamminstanzobjektes, auf das die Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat: Zuordnen eines Datenspeicherbereichs für das Feld des Instanzobjektes; Kennzeichnen des entsprechenden Feldes des Stamminstanzobjektes so, dass es eine Schreiboperation ausgeführt hat; Ausführen der Schreiboperation in dem Datenspeicherbereich.
-
In einer Ausführungsform weist das Verfahren weiterhin auf: als Reaktion darauf, dass ein entsprechendes Feld eines Stamminstanzobjektes, auf das die Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es eine Schreiboperation ausgeführt hat, Ausführen der Schreiboperation in dem Datenspeicherbereich, der für das Feld des Instanzobjektes zugeordnet ist, das dieser Schreiboperation zugehörig ist.
-
In einer Ausführungsform weist das Verfahren weiterhin auf: als Reaktion darauf, dass ein Thread der Stamminstanz beim Ausführen zu einem zuvor festgelegten Einfrierpunkt in der Anwendung gelangt, Kennzeichnen eines Attributs eines Stamminstanzobjektes als „nur lesen”.
-
Gemäß einem weiteren Aspekt der vorliegenden Erfindung wird ein System zum Ausführen einer Vielzahl von Instanzen einer Anwendung bereitgestellt, wobei das System aufweist: ein Stamminstanz-Startmittel, das zum Starten eines Ausführens einer Stamminstanz der Anwendung eingerichtet ist, wobei die Stamminstanz mindestens einen Thread beinhaltet; ein Stamminstanz-Anhaltemittel, das eingerichtet ist, als Reaktion darauf, dass ein Thread der Stamminstanz beim Ausführen zu einem zuvor festgelegten Einfrierpunkt in der Anwendung gelangt, das Ausführen aller Threads der Stamminstanz anzuhalten; ein Repliziermittel, das eingerichtet ist, als Reaktion auf ein Starten eines Ausführens einer Instanz der Anwendung den Ausführungszustand aller Threads der Stamminstanz als den Ausführungszustand aller Threads der Instanz zu replizieren; und ein Ausführungsfortfahrmittel, das zum Fortfahren mit dem Ausführen aller Threads der Instanz der Anwendung eingerichtet ist.
-
In einer Ausführungsform beinhaltet der Ausführungszustand mindestens: den aktuellen Stapel, die Werte von Registern und die aktuelle Anweisung eines Thread.
-
In einer Ausführungsform enthält der aktuelle Stapel des Ausführungszustands eine Referenz zu einem Instanzobjekt in der Instanz, wobei die Referenz zum Instanzobjekt so initialisiert ist, dass sie auf ein Stamminstanzobjekt verweist.
-
In einer Ausführungsform weist das Ausführungsfortfahrmittel auf: ein Schreiboperations-Empfangsmittel, das zum Empfangen einer Schreiboperation auf ein Feld des Instanzobjektes eingerichtet ist; ein Datenspeicher-Zuordnungsmittel, das eingerichtet ist, als Reaktion darauf, dass eine Referenz zum Instanzobjekt auf das Stamminstanzobjekt verweist, einen Datenspeicherbereich für das Instanzobjekt zuzuordnen; ein Referenzmodifizierungsmittel, das eingerichtet ist, als Reaktion darauf, dass eine durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt auf das Stamminstanzobjekt verweist, die Referenz zum Instanzobjekt auf den durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich verweisen zu lassen; ein Schreiboperations-Ausführungsmittel, das eingerichtet ist, als Reaktion darauf, dass die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt auf das Stamminstanzobjekt verweist, die Schreiboperation im durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich auszuführen.
-
In einer Ausführungsform ist das Schreiboperations-Ausführungsmittel weiterhin eingerichtet, als Reaktion darauf, dass die durch die Schreiboperations-Empfangseinheit empfangene Referenz zum Instanzobjekt nicht auf das Stamminstanzobjekt verweist, die Schreiboperation im durch das Datenspeicherbereichs-Zuordnungsweisungsmittel zugeordneten Datenspeicherbereich auszuführen.
-
In einer Ausführungsform weist das Ausführungsfortfahrmittel auf: ein Schreiboperations-Empfangsmittel, das zum Empfangen einer Schreiboperation auf ein Feld des Instanzobjektes eingerichtet ist; ein Kennzeichnungsmittel, das eingerichtet ist, als Reaktion darauf, dass ein entsprechendes Feld eines Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat das entsprechende Feld des Stamminstanzobjektes so zu kennzeichnen, dass es eine Schreiboperation ausgeführt hat; ein Datenspeicherbereichs-Zuordnungsmittel, das eingerichtet ist, als Reaktion darauf, dass ein entsprechendes Feld eines Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat, einen Datenspeicherbereich für das Feld des Instanzobjektes zuzuordnen; ein Schreiboperations-Ausführungsmittel, das eingerichtet ist, als Reaktion darauf, dass ein entsprechendes Feld eines Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat, die Schreiboperation in dem durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich auszuführen.
-
In einer Ausführungsform ist das Schreiboperations-Ausführungsmittel weiterhin eingerichtet, als Reaktion darauf, dass ein entsprechendes Feld eines Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es eine Schreiboperation ausgeführt hat, die Schreiboperation in dem durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich auszuführen.
-
In einer Ausführungsform weist das System weiterhin auf: ein Stamminstanzobjekt-Kennzeichnungsmittel, das eingerichtet ist, als Reaktion darauf, dass ein Thread der Stamminstanz beim Ausführen zu einem zuvor festgelegten Einfrierpunkt in der Anwendung gelangt, ein Attribut des Stamminstanzobjektes in der Stamminstanz als „nur lesen” zu kennzeichnen.
-
Die Erfindung kann auch in Computersoftware realisiert werden.
-
KURZE BESCHREIBUNGEN DER ZEICHNUNGEN
-
Nun werden in lediglich beispielhafter Weise und unter Bezugnahme auf die folgenden Zeichnungen Ausführungsformen der vorliegenden Erfindung beschrieben:
-
1 veranschaulicht den Prozess eines Verfahrens zum Ausführen einer Vielzahl von Instanzen einer Anwendung gemäß einer Ausführungsform der vorliegenden Erfindung;
-
2 veranschaulicht weiterhin beispielhaft das Verfahren zum Ausführen einer Vielzahl von Instanzen einer Anwendung, indem die Sprache Java als Beispiel verwendet wird;
-
3 veranschaulicht gemäß einer Ausführungsform der vorliegenden Erfindung einen Prozess, dass eine Instanz eine Schreiboperation durchführt;
-
4 veranschaulicht gemäß einer Ausführungsform der vorliegenden Erfindung einen weiteren Prozess, dass eine Instanz eine Schreiboperation durchführt; und
-
5 veranschaulicht schematisch gemäß einer Ausführungsform der vorliegenden Erfindung ein strukturelles Blockschaubild eines Systems zum Ausführen einer Vielzahl von Instanzen einer Anwendung.
-
(Es ist zu beachten, dass dieselben Bezugszeichen üblicherweise dieselben Komponenten in den beispielhaften Ausführungsformen der vorliegenden Erfindung bezeichnen.)
-
DETAILLIERTE BESCHREIBUNG BEISPIELHAFTER AUSFÜHRUNGSFORMEN
-
Bevorzugte Realisierungen der vorliegenden Erfindung werden detaillierter unter Bezugnahme auf die begleitenden Zeichnungen beschrieben, in denen die bevorzugten Ausführungsformen gezeigt sind. Die vorliegende Erfindung kann jedoch in vielfältigen Formen realisiert werden und sollte nicht als auf die hierin dargelegten Ausführungsformen beschränkt angesehen werden. Diese Ausführungsformen werden im Gegenteil bereitgestellt, um der vorliegenden Erfindung mehr Genauigkeit und Vollständigkeit zu verleihen und dem Fachmann den Umfang der vorliegenden Erfindung vollständig zu vermitteln.
-
Programmierer rufen üblicherweise Programme auf, die in den Computerprozessen ausgeführt werden, und jeder Prozess verfügt über seinen eigenen Arbeitsspeicherplatz. Zum Beispiel wird für ein IE-Browser-Programm jedes Mal ein IE-Browser-Fenster geöffnet, wenn ein IE-Browser-Prozess gestartet wird. Und ein Thread bezieht sich auf einen Ausführungsfluss in einem Prozess und wird manchmal auch ein Ausführungskontext genannt. Ein einzelner Prozess kann sich aus einer Vielzahl von Threads zusammensetzen, d. h., eine Vielzahl unterschiedlicher Threads können gleichzeitig in einem einzigen Prozess ausgeführt werden, und sie führen jeweils unterschiedliche Tasks aus. Wird eine Vielzahl von Threads in einem Prozess gleichzeitig ausgeführt, wird ein solcher Ausführungsmodus „paralleles Ausführen” genannt. Der Hauptunterschied zwischen einem Thread und einem Prozess liegt darin, dass jeder Prozess das Betriebssystem benötigt, um einen separaten Arbeitsspeicheradressraum dafür anzulegen, wohingegen alle Threads in einem einzelnen Prozess in demselben einen Adressraum arbeiten, und diese Threads können denselben einen Speicher und Systemressourcen gemeinsam nutzen, z. B. ein Objekt oder eine geöffnete Datei gemeinsam nutzen. Vorhandene Betriebssysteme wie beispielsweise Mac, Windows® verwenden üblicherweise das Konzept mehrfacher Threads und sehen einen Thread als grundlegende Ausführungseinheit an. (Windows ist eine Marke der Microsoft Corporation in den USA, anderen Ländern oder beidem.)
-
Um für eine Anwendung wie die Sprache Java in der vorhandenen Cloud-Computing-Umgebung die mandantenfähige Architektur umzusetzen, wird eine virtuelle Maschine repliziert, und eine weitere gleiche Anwendung wird auf der virtuellen Maschine ausgeführt. Bei der virtuellen Maschine handelt es sich um einen Prozess, und der replizierte Prozess der virtuellen Maschine kann Arbeitsspeicherseiten gemeinsam mit dem ursprünglichen Prozess der virtuellen Maschine nutzen; bei Arbeitsspeicherseiten handelt es sich jedoch um große Datenspeichereinheiten im Arbeitsspeicher, so dass die Granularität einer solchen gemeinsamen Nutzung grob und der eingesparte Datenspeicherplatz begrenzt ist.
-
Darüber hinaus ist es in vielen Szenarien oft erforderlich, eine Vielzahl von Instanzen einer Anwendung auszuführen. Eine Instanz bezeichnet ein einziges Mal eines Ausführens einer Anwendung, z. B. bezieht sich ein Ausführen einer Vielzahl von Eclipse-Instanzen auf das mehrmalige Ausführen der Anwendung „Eclipse”; oder ein Ausführen einer Vielzahl von Instanzen einer Java-Anwendung bezieht sich auf das mehrmalige Ausführen der Anwendung „Java” im virtuellen Java-Maschinenprozess. Bei einer Instanz handelt es sich ursprünglich um ein virtuelles Konzept, und sie besitzt keine ihr entsprechende Programmentität; eine einzelne Instanz kann eine Vielzahl von Threads beinhalten; und wenn eine Vielzahl von Instanzen im selben Prozess ausgeführt werden, können die Instanzen den Arbeitsspeicherplatz gemeinsam nutzen. Jede Instanz kann eine Vielzahl von Threads beinhalten, und die derzeitigen mandantenfähigen Lösungen verfügen nur über Replizierung auf der Ebene des virtuellen Maschinenprozesses, d. h., Prozesse nutzen Arbeitsspeicherseiten gemeinsam. Eine Vielzahl von in einer Vielzahl von Instanzen enthaltenen Threads weist jedoch keine gemeinsame Nutzung zwischen ihnen auf, wohingegen die Vielzahl von Threads innerhalb der Instanzen viele Ähnlichkeiten aufweisen. Da die Datenspeicherplätze von Instanzenprozessen unabhängig sind und gemeinsame Prozessnutzung verwenden, können Arbeitsspeicherseiten üblicherweise aufgrund kleinerer Unterschiede nicht gemeinsam genutzt werden, und durch die grobe Granularität des gemeinsamen Nutzens wird viel Anwendungsausführungs-Speicherplatz verschwendet.
-
Daher berücksichtigt eine Ausführungsform der vorliegenden Erfindung, dass in einer Cloud-Computing-Umgebung das Ausführen einer Vielzahl von Anwendungsinstanzen verwenden kann, um die mandantenfähige Architektur zu verwirklichen, und führt wiederholt eine gemeinsame Datennutzung für die Vielzahl von Instanzen in der Anwendung durch, um den Speicherplatz des Ausführens der Anwendung zu sparen.
-
Die vorliegende Erfindung stellt gemäß einer Ausführungsform ein Verfahren zum Ausführen einer Vielzahl von Instanzen einer Anwendung bereit. Anhand der Beschreibung der Verfahrensprozesse erkennt der Fachmann, dass das Verfahren für alle Anwendungen anwendbar ist, die objektorientierte Sprachen verwenden und auf virtuellen Maschinen ausgeführt werden, und es gibt viele solcher Anwendungen, z. B. Anwendungen der Sprache „Java”, die auf einer virtuellen Java-Maschine (Java virtual machine (JVM)) ausgeführt werden können, Anwendungen der Sprache „Ruby”, die auf einer virtuellen Ruby-Maschine ausgeführt werden können, und Anwendungen der Sprache „C#”, die auf einer virtuellen C#-Maschine ausgeführt werden können, usw.
-
1 veranschaulicht den Prozess eines Verfahrens zum Ausführen einer Vielzahl von Instanzen einer Anwendung gemäß einer Ausführungsform der vorliegenden Erfindung. Gemäß 1 wird in Schritt S101 das Ausführen einer Stamminstanz der Anwendung gestartet, und die Stamminstanz beinhaltet mindestens einen Thread. Hier kann die Stamminstanz als das erste Ausführen der Anwendung verstanden werden; in Schritt S102 wird ermittelt, ob ein Thread der Stamminstanz der Anwendung beim Ausführen zu einem Einfrierpunkt gelangt, was nachstehend detailliert erläutert wird. Falls nicht, wird weiterhin gewartet; falls ja, wird in Schritt S103 als Reaktion darauf, dass ein Thread der Stamminstanz beim Ausführen an einen zuvor festgelegten Einfrierpunkt der Anwendung gelangt, das Ausführen aller Threads der Stamminstanz angehalten; vorzugsweise wird in Schritt S104 ein Attribut eines Stamminstanzobjektes in der Stamminstanz als „nur lesen” gekennzeichnet, was nur dazu dient zu verhindern, dass eine nachfolgende Schreiboperation das Stamminstanzobjekt modifiziert wird; wie anhand der nachfolgenden Abarbeitung des Verfahrens ersichtlich ist, findet im Falle, dass eine Schreiboperation betroffen ist, in der Tat keine Operation des direkten Modifizierens eines Feldes des Stamminstanzobjektes statt. Daher dient ein solches Kennzeichnen nur dazu, Fehloperationen zu verhindern, und es handelt sich um eine bevorzugte Realisierung; in Schritt S105 wird ermittelt, ob alle Threads einer Instanz der Anwendung auszuführen sind, und hier versteht sich eine Instanz als das zweite, dritte ... Ausführen der Anwendung, d. h. kein erstes Ausführen der Anwendung; falls nicht, wird weiterhin gewartet; falls ja, wird in Schritt S106 als Reaktion auf das Starten des Ausführens einer Instanz der Anwendung der Ausführungszustand aller Threads der Stamminstanz als der Ausführungszustand aller Threads der Instanz repliziert; auf der Grundlage des replizierten Ausführungszustandes aller Threads wird in Schritt S107 fortgefahren, alle Threads der Instanz der Anwendung auszuführen.
-
Verglichen mit der Realisierung von Mandantenfähigkeit, bei welcher die JVM beim Stand der Technik repliziert wird, wird beim vorstehend beschriebenen Verfahren lediglich der Ausführungszustand aller Threads der Stamminstanz repliziert, und die Granularität der Replikation ist geringer, und die replizierten Inhalte sind weniger umfangreich, so dass mehr Programmausführungsspeicherplatz eingespart wird.
-
Weiterhin veranschaulicht 2 beispielhaft das Verfahren zum Ausführen einer Vielzahl von Instanzen einer Anwendung, indem die Sprache Java als Beispiel verwendet wird. Obwohl das Verfahren unter Verwendung der Sprache Java als ein Beispiel beschrieben ist, weiß der Fachmann, dass sie durch jede beliebige andere Anwendung ersetzt werden kann, die eine objektorientierte Sprache verwendet und auf einer virtuellen Maschine ausgeführt wird. In 2 ist die gesamte Anwendung wie ein Prozess und wird auf der virtuellen Java-Maschine ausgeführt, und die JVM an sich kann viele Threads enthalten. Der JVM-Thread von 2 ist nur beispielhaft und zeigt eine Ausführungsumgebung der folgenden Anwendung. Die Anwendung findet unter der mandantenfähigen Architektur statt, und gemäß dem vorstehenden Verfahren kann das Ausführen auf der virtuellen Java-Maschine in zwei Phasen aufgeteilt werden: Bei der ersten Phase handelt es sich um das Ausführen der Stamminstanz; gemäß 2 wird angenommen, dass eine Instanz drei Threads enthält und der erste die Stamminstanz ausführt; allgemein wird eine Instanz einer Anwendung üblicherweise von einem Haupt-Thread ausgeführt. Der Haupt-Thread kann weitere Threads erzeugen (d. h. untergeordnete Threads), wobei die untergeordneten Threads ihre eigenen untergeordneten Threads erzeugen können. Das Erzeugen dieser Threads wird durch den von Programmierern geschriebenen Code gesteuert. Wenn das Ausführen bis zu einem gewissen Ausmaß erfolgt, werden alle Threads der Stamminstanz angehalten, was hier „Einfrierpunkt” genannt wird. Gemäß einer Ausführungsform der vorliegenden Erfindung gibt der Einfrierpunkt an, dass alle Objekte initialisiert wurden, die durch unterschiedliche Mandanten gemeinsam genutzt werden könnten. Die Art des Festlegens des Einfrierpunktes kann ein Aufrufen einer speziellen Anweisung oder Funktion sein, die durch die virtuelle Maschine bereitgestellt wird. Üblicherweise muss in einem Programm nur ein einziger Einfrierpunkt festgelegt sein, der nur einmal ausgeführt wird. Wenn ein Thread des Programms beim Ausführen erstmals an den Einfrierpunkt gelangt, empfängt die virtuelle Maschine das Aufrufen der speziellen Anweisung oder Funktion und beginnt dann unmittelbar, die Einfrieroperation auszuführen, d. h., das Ausführen aller Threads der Anwendung auszusetzen. Der Einfrierpunkt wird üblicherweise durch einen Programmierer entsprechend seiner Kenntnis des Programms während des Schreibens des Programms festgelegt und befindet sich innerhalb des Programms. Daher können Programme mit denselben Funktionen, die von unterschiedlichen Programmierern geschrieben wurden, aufgrund der unterschiedlichen Positionen des Einfrierpunktes unterschiedlich viel Datenspeicherplatz einsparen. In Zukunft wird mit dem Fortschreiten der Technologie und der Entwicklung der künstlichen Intelligenz der Einfrierpunkt unter Umständen bis zu einem gewissen Grad automatisch durch Programmierwerkzeuge festgelegt werden. Wenn der Einfrierpunkt automatisch festgelegt wird, können die folgenden Grundgedanken verwendet werden: am Einfrierpunkt weist die Anzahl von durch alle Threads der Stamminstanz geöffneten lokalen Handles ein Minimum auf, und die Anzahl aktiver Threads der Instanz ist minimal. Hier schließen die lokalen Handles Datei-Handles, Netzwerk-Handles usw. mit ein. Wenn die Stamminstanz beim Ausführen an den Einfrierpunkt gelangt, werden all ihre Threads nicht länger ausgeführt, und zu diesem Zeitpunkt kann ein Attribut eines Stamminstanzobjektes in der Stamminstanz vorzugsweise als „nur lesen” gekennzeichnet werden, und dann kann der Ausführungszustand aller Threads der Stamminstanz in der zweiten Phase als eine Replizierungsgrundlage für das Ausführen aller Threads anderer Instanzen verwendet werden. Es gibt viele Arten, ein Stamminstanzobjekt zu kennzeichnen, z. B. Verwenden eines Flag-Bit, wobei hierbei im Falle, dass das Flag-Bit 0 ist, die Attribute aller Objekte in der Stamminstanz „nur lesen”, andernfalls lesbar und schreibbar sind, oder Verwenden der Art des Sperrens usw. In der zweiten Phase wird ein Ausführen aller Threads anderer Instanzen gestartet; für das Ausführen aller Threads einer ersten Instanz wird zuerst der Ausführungszustand aller Threads der Stamminstanz als der Ausführungszustand aller Threads der Instanz repliziert, und der Ausführungszustand aller Threads ist die Datenstruktur aller Thread-Objekte an sich, wozu mindestens der aktuelle Stapel, die Werte von Registern und die aktuelle Anweisung eines Thread zählen. Der aktuelle Stapel eines Thread kann viele Informationen enthalten, wozu mindestens die Referenz zu einem Instanzobjekt zählt, und bei der Referenz kann es sich um einen Zeiger handeln, der beim Initialisieren auf ein Stamminstanzobjekt verwiesen wird. Auf diese Weise werden die Ausführungsumgebung und die Daten der Stamminstanz hinüberrepliziert. Offensichtlich besitzt im Vergleich mit dem Replizieren der Ausführungsumgebung einer Anwendung das Replizieren der Inhalte der Stamminstanz eine geringere Granularität und weniger umfangreiche Inhalte; darüber hinaus kann dies die Startzeit einer neuen Instanz weiter verringern. Wenn das Ausführen einer zweiten und dritten Instanz beginnt, wird somit nach wie vor der Ausführungszustand aller Threads von der Stamminstanz repliziert, und dann fahren sie mit dem Ausführen fort.
-
Während des Ausführungsprozesses aller Threads einer Instanz kann eine Zugriffsoperation, wozu eine Leseoperation und eine Schreiboperation zählen, an einem Feld eines Objekts in einem Thread durchgeführt werden, und hier wird als Erstes eine Schreiboperation betrachtet. 3 zeigt einen Prozess, dass eine Instanz eine Schreiboperation durchführt. Gemäß 3 wird in Schritt S301 eine Schreiboperation auf ein Feld eines Instanzobjektes der Anwendung empfangen; in Schritt S302 wird ermittelt, ob es sich bei der Schreiboperation um eine erste Schreiboperation auf das Instanzobjekt handelt. Da vor der ersten Schreiboperation die Referenz zum Instanzobjekt im aktuellen Stapel des Thread als auf ein Stamminstanzobjekt verweisend initialisiert ist, wird im Falle, dass sie als die erste Schreiboperation ermittelt wird, d. h. als Reaktion darauf, dass die Referenz zum Instanzobjekt auf ein Stamminstanzobjekt verweist, in Schritt S303 ein Datenspeicherbereich für das Instanzobjekt zugeordnet; in Schritt S304 wird die im aktuellen Stapel enthaltene Referenz zum Instanzobjekt auf den Datenspeicherbereich verwiesen, der für das Instanzobjekt zugeordnet ist; in Schritt S305 wird die Schreiboperation in dem Speicherbereich ausgeführt. Wenn in Schritt S302 festgestellt wird, dass es sich bei der Schreiboperation nicht um die erste Schreiboperation auf das Instanzobjekt handelt, was bedeutet, dass die im aktuellen Stapel enthaltene Referenz zum Instanzobjekt nicht länger auf ein Stamminstanzobjekt, sondern auf den für das Instanzobjekt zugeordneten Datenspeicherbereich verwiesen hat, d. h. als Reaktion darauf, dass die Referenz zum Instanzobjekt nicht auf ein Stamminstanzobjekt verweist, wird direkt zu Schritt S305 gesprungen.
-
Eine an einem Feld eines Objekts im Thread durchgeführte Leseoperation kann direkt auf den Bereich zugreifen, auf den die im aktuellen Stapel des Ausführungszustands aller Threads der Instanz enthaltene Referenz zum Instanzobjekt verweist; wenn keine Schreiboperation durchgeführt wurde, wird der Wert des Feldes des Stamminstanzobjektes gelesen; wenn eine Schreiboperation durchgeführt wurde, wird der Wert des Feldes des Objekts im für das Instanzobjekt zugeordneten Datenspeicherbereich gelesenen.
-
Wie anhand der vorstehenden Lösung ersichtlich ist, wird durch Verwenden der vorstehenden Zugriffsoperation der durch Attribute eines Instanzobjektes, d. h. Daten, belegte Datenspeicherplatz weiter verringert; wenn es keine Datenaktualisierung gibt, d. h. keine Schreiboperation auf ein Attribut eines Instanzobjektes geschieht, werden alle Leseoperationen auf Attribute eines Stamminstanzobjektes gerichtet, und es besteht keine Notwendigkeit, die Attribute von Instanzobjekten zu replizieren, und der Datenspeicherplatz kann zudem weiter verringert werden.
-
4 zeigt einen weiteren Prozess, dass eine Instanz eine Schreiboperation durchführt. Gemäß 4 wird in Schritt S401 eine Schreiboperation auf ein Feld eines Instanzobjektes empfangen; in Schritt S402 wird ermittelt, ob ein entsprechendes Feld eines Stamminstanzobjektes, auf das die Referenz zum Stamminstanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat, und als Reaktion darauf, dass ein entsprechendes Feld eines Stamminstanzobjektes, auf das die Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat, wird in Schritt S403 ein Datenspeicherbereich für das Feld des Instanzobjektes zugeordnet, das der Schreiboperation zugehörig ist; auf diese Weise wird kein Datenspeicherbereich für ein gesamtes Objekt wie bei der in 3 gezeigten Realisierung zugeordnet, und es wird nur ein Datenspeicherbereich für das Feld zugeordnet, das im Objekt modifiziert werden muss. Das Feld im Objekt stellt nur einen kleinen Teil des Objektes dar, und der belegte Datenspeicherplatz ist weitaus geringer als der durch das Objekte belegte Datenspeicherplatz, und somit kann dies weiter den Datenspeicherplatz der Instanz einsparen; in Schritt S404 wird das entsprechende Feld des Stamminstanzobjektes, auf das die Referenz zum Instanzobjekt verweist, so gekennzeichnet, dass es eine Schreiboperation ausgeführt hat; in Schritt S405 wird die Schreiboperation im zugeordneten Datenspeicherbereich ausgeführt. Ein solches Kennzeichnen kann auf vielfältige Weise erfolgen, z. B. Verwenden unterschiedlicher Werte einer Variablen, um unterschiedliche Bedeutungen anzugeben, oder Verwenden der virtuellen Maschine zum Kennzeichnen usw. Wenn festgestellt wird, dass das entsprechende Feld des Stamminstanzobjektes, auf das die Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es eine Schreiboperation ausgeführt hat, was bedeutet, dass dem Feld des Instanzobjektes, das der Schreiboperation zugehörig ist, ein Datenspeicherbereich zugeordnet wurde, wird zu diesem Zeitpunkt in Schritt S406 als Reaktion darauf, dass das entsprechende Feld des Stamminstanzobjektes, auf das die Referenz zum Instanzobjektes verweist, so gekennzeichnet, dass es eine Schreiboperation ausgeführt hat, und die Schreiboperation wird im für das Feld des der Schreiboperation zugehörigen Instanzobjektes zugeordneten Datenspeicherbereich ausgeführt.
-
Eine in einem Feld eines Objektes im Thread durchgeführte Leseoperation kann direkt auf den Bereich zugreifen, auf den die im aktuellen Stapel des Ausführungszustands des Thread der Instanz enthaltene Referenz zum Instanzobjekt verweist; wenn keine Schreiboperation durchgeführt wurde, wird der Wert des Feldes des Stamminstanzobjektes gelesen; wenn eine Schreiboperation durchgeführt wurde, wäre das Feld des Instanzobjektes gekennzeichnet worden, und eine solche in der virtuellen Maschine gespeicherte Information kann verwendet werden, den Wert des Feldes des Objekts im für das Feld des Instanzobjektes zugeordneten Datenspeicherbereich auszulesen.
-
Offensichtlich wird bei dieser Realisierung nicht nur weiter der Datenspeicherplatz einer Instanz eingespart, sondern sie bringt auch alle Vorteile der Ausführungsform von 3 mit sich.
-
Wenn das Ausführen der Anwendung angehalten wird, wird nicht nur das Ausführen aller anderen Instanzen angehalten, um den Programmausführspeicherplatz und den durch alle Instanzen belegten Datenspeicherplatz freizumachen, sondern der durch die Stamminstanz belegte Programmausführspeicherplatz und der Datenspeicherplatz werden ebenso freigemacht.
-
Unter demselben erfinderischen Konzept wird in einer Ausführungsform der vorliegenden Erfindung zudem ein System zum Ausführen einer Vielzahl von Instanzen einer Anwendung offenbart. 5 zeigt schematisch ein strukturelles Blockschaubild eines Systems zum Ausführen einer Vielzahl von Instanzen einer Anwendung. Wie in 5 gezeigt, weist das System auf: ein Stamminstanz-Startmittel 501, das zum Starten eines Ausführens einer Stamminstanz der Anwendung eingerichtet ist, wobei die Stamminstanz mindestens einen Thread beinhaltet; ein Stamminstanz-Anhaltemittel 502, das eingerichtet ist, als Reaktion darauf, dass ein Thread der Stamminstanz beim Ausführen zu einem zuvor festgelegten Einfrierpunkt in der Anwendung gelangt, das Ausführen aller Threads der Stamminstanz anzuhalten; ein Repliziermittel 503, das eingerichtet ist, als Reaktion auf ein Starten eines Ausführens einer Instanz der Anwendung, den Ausführungszustand aller Threads der Stamminstanz als den Ausführungszustand aller Threads der Instanz zu replizieren; und ein Ausführungsfortfahrmittel 504 das zum Fortfahren mit dem Ausführen aller Threads der Instanz der Anwendung eingerichtet ist. In einer bevorzugten Ausführungsform weist das System weiterhin ein Stamminstanzobjekt-Kennzeichnungsmittel 505 auf, das eingerichtet ist, als Reaktion darauf, dass ein Thread der Stamminstanz beim Ausführen zu einem zuvor festgelegten Einfrierpunkt in der Anwendung gelangt, ein Attribut eines Stamminstanzobjektes in der Stamminstanz als „nur lesen” zu kennzeichnen. Im System beinhaltet der Ausführungszustand des Thread mindestens den aktuellen Stapel, die Werte von Registern und die aktuelle Anweisung des Thread. Der aktuelle Stapel des Ausführungszustands eines Thread einer Systeminstanz beinhaltet eine Referenz zu einem Instanzobjekt, wobei die Referenz zur Objektinstanz als auf das Stamminstanzobjekt verweisend initialisiert wird.
-
In einer Ausführungsform weist das Ausführungsfortfahrmittel weiterhin auf: ein Schreiboperations-Empfangsmittel, das zum Empfangen einer Schreiboperation auf ein Feld eines Instanzobjektes eingerichtet ist; ein Speicherzuordnungsmittel, das eingerichtet ist, als Reaktion darauf, dass die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt auf ein Stamminstanzobjekt verweist, einen Datenspeicherbereich für das Instanzobjekt zuzuordnen; ein Referenzmodifizierungsmittel, das eingerichtet ist, als Reaktion darauf, dass die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt auf ein Stamminstanzobjekt verweist, die Referenz zum Instanzobjekt auf den durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich verweisen zu lassen; ein Schreiboperations-Ausführungsmittel, das eingerichtet ist, als Reaktion darauf, dass die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt auf ein Stamminstanzobjekt verweist, die Schreiboperation im durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich auszuführen. Dabei ist das Schreiboperations-Ausführungsmittel weiterhin eingerichtet als Reaktion darauf, dass die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt nicht auf das Stamminstanzobjekt verweist, die Schreiboperation im durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich auszuführen.
-
In einer weiteren Ausführungsform weist das Ausführungsfortfahrmittel weiterhin auf: ein Schreiboperations-Empfangsmittel, das zum Empfangen einer Schreiboperation auf ein Feld eines Instanzobjektes eingerichtet ist; ein Kennzeichnungsmittel, das eingerichtet ist, als Reaktion darauf, dass das entsprechende Feld des Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat, das entsprechende Feld des Stamminstanzobjektes so zu kennzeichnen, dass es eine Schreiboperation ausgeführt hat; ein Datenspeicherbereichs-Zuordnungsmittel, das eingerichtet ist, als Reaktion darauf, dass das entsprechende Feld des Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat, einen Datenspeicherbereich für das Feld des Instanzobjektes zuzuordnen; ein Schreiboperations-Ausführungsmittel, das eingerichtet ist, als Reaktion darauf, dass das entsprechende Feld des Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es noch keine Schreiboperation ausgeführt hat, die Schreiboperation in dem durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich auszuführen. Im System ist das Schreiboperations-Ausführungsmittel weiterhin eingerichtet, als Reaktion darauf, dass das entsprechende Feld des Stamminstanzobjektes, auf das die durch das Schreiboperations-Empfangsmittel empfangene Referenz zum Instanzobjekt verweist, so gekennzeichnet ist, dass es eine Schreiboperation ausgeführt hat, die Schreiboperation in dem durch das Datenspeicherbereichs-Zuordnungsmittel zugeordneten Datenspeicherbereich auszuführen.
-
Es sind hier zwar die beispielhaften Ausführungsformen der vorliegenden Erfindung unter Bezugnahme auf die begleitenden Zeichnungen beschrieben, es sollte sich jedoch verstehen, dass die vorliegende Erfindung nicht auf diese genauen Ausführungsformen beschränkt ist und der Fachmann an den Ausführungsformen vielfältige Änderungen und Modifikationen vornehmen kann, ohne vom Umfang und den Zielsetzungen der vorliegenden Erfindung abzuweichen. All diese Änderungen und Modifikationen sollen im Umfang der in den angehängten Ansprüchen festgelegten vorliegenden Erfindung enthalten sein.
-
Darüber hinaus weiß der Fachmann gemäß der vorstehenden Beschreibung, dass die vorliegende Erfindung als Vorrichtungen, Verfahren oder Computerprogrammprodukte ausgebildet werden kann. Daher kann die vorliegende Erfindung insbesondere in folgenden Formen vorliegen, d. h. vollständig Hardware, vollständig Software (darunter Firmware, residente Software, Mikrocode usw.) oder eine Kombination aus Softwareteil und Hardwareteil, was hierin allgemein „Schaltung”, „Modul” oder System genannt wird. Darüber hinaus kann die vorliegende Erfindung in Form eines in jedem beliebigen gegenständlichen Ausführungsmedium ausgebildeten Computerprogrammproduktes vorliegen, in dem von Computern verwendbarer Programmcode enthalten ist.
-
Jede beliebige Kombination aus einem oder mehreren computerlesbaren oder von Computern verwendbaren Medien kann verwendet werden. Bei dem computerlesbarem oder von Computern verwendbaren Medium kann es sich, ohne darauf beschränkt zu sein, um ein System, eine Vorrichtung, eine Einheit oder ein Ausbreitungsmedium elektronischer, magnetischer, optischer, elektromagnetischer oder Infrarot oder Halbleiter verwendender Art handeln. Zu spezifischeren Beispielen (nicht abschließende Liste) für das computerlesbare Medium gehört Folgendes: eine elektrische Verbindung mit einer oder mehreren Leitungen, eine transportable Computerdiskette, eine Festplatte, ein Speicher mit wahlfreiem Zugriff (random access memory (RAM)), ein Nur-Lese-Speicher (read-only memory (ROM)), ein elektrisch programmierbarer Nur-Lese-Speicher (electrically programmable read-only memory (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein transportabler Nur-Lese-Compact-Disk-Speicher (CD-ROM), eine optische Speichereinheit, ein Übertragungsmedium, welches das Internet oder ein Intranet unterstützt, oder eine magnetische Speichereinheit. Es ist zu beachten, dass es sich bei dem computerlesbaren oder durch Computer verwendbaren Medium auch um ein Papier mit darauf gedruckten Programmen oder andere geeignete Medien handeln kann, dies liegt daran, dass zum Beispiel das Programm auf eine elektrische Weise durch elektrisches Einscannen dieser Art von Papier oder anderer Medien erhalten und auf geeignete Weise kompiliert, interpretiert oder verarbeitet werden und erforderlichenfalls in einem Computerspeicher gespeichert werden kann. Im Kontext dieses Dokuments kann ein computerlesbares oder von Computern verwendbares Medium jedes Medium sein, welches Programme zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Anweisungsausführung beinhalten, speichern, liefern, senden oder übermitteln kann. Zu dem computerlesbaren Medium können Datensignale mit darin enthaltenem und in einem Basisband oder als Teil einer Trägerwelle verbreiteten computerlesbaren Programmcode zählen. Der computerlesbare Programmcode kann mittels jedweden geeigneten Mediums einschließlich, ohne darauf beschränkt zu sein, kabellose, kabelgebundene, optische Lichtwellenleiterkabel, HF etc. übertragen werden.
-
Der Computerprogrammcode zum Ausführen von Operationen der vorliegenden Erfindung kann in jeder Kombination einer oder mehrerer Programmiersprachen geschrieben sein, darunter objektorientierte Programmiersprachen wie Java, Smalltalk, C++ oder ähnliche und herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C” oder ähnliche Programmiersprachen. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf einem entfernt angeordneten Computer oder Server ausgeführt werden. In letzterem Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über jede beliebige Art von Netzwerk, darunter ein lokales Netzwerk (local area network (LAN)) oder ein Weitverkehrsnetzwerk (wide area network (WAN)) verbunden sein, oder es kann eine Verbindung zu einem externen Computer (zum Beispiel mittels eines Internetdienstanbieters über das Internet) hergestellt werden.
-
Darüber hinaus kann jeder Block des Ablaufplans und/oder der Blockschaubilder sowie Kombinationen der Blöcke in dem Ablaufplan und/oder den Blockschaubildern der vorliegenden Erfindung durch Computerprogrammanweisungen realisiert werden. Diese Computerprogrammanweisungen können einem Prozessor eines universellen Computers, eines zweckbestimmten Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine so zu erzeugen, dass die Anweisungen, die über den Prozessor des Computers oder der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, ein Mittel zum Realisieren der im Block oder in den Blöcken des Ablaufplans und/oder Blockschaubilds angegebenen Funktionen/Handlungen erzeugen.
-
Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert sein, das einen Computer oder eine andere programmierbare Datenverarbeitungsvorrichtung anleiten kann, auf eine bestimmte Weise zu funktionieren, so dass die in dem computerlesbaren Medium gespeicherten Anweisungen einen hergestellten Artikel einschließlich eines Anweisungsmittels erzeugen, welches die im Block oder in den Blöcken in den Ablaufplänen und/oder Blockschaubildern angegebenen Funktionen/Handlungen ausführt.
-
Die Computerprogrammanweisungen können auch auf einen Computer oder eine andere programmierbare Datenverarbeitungsvorrichtung geladen werden, um eine Reihe von auf dem Computer oder der anderen programmierbaren Vorrichtung auszuführenden Operationsschritten hervorzurufen, um einen auf dem Computer realisierten Prozess so zu erzeugen, dass die auf dem Computer oder der anderen programmierbaren Vorrichtung ausgeführten Anweisungen einen Prozess zum Realisieren der im Block oder in den Blöcken in den Ablaufplänen und/oder Blockschaubildern angegebenen Funktionen/Handlungen bereitstellen.
-
Die Ablaufpläne und Blockschaubilder in den Figuren veranschaulichen die Architekturen, Funktionalität und die Arbeitsweisen möglicher Realisierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block im Ablaufplan oder dem Blockschaubild für ein Modul, ein Segment oder einen Codeabschnitt stehen, der eine oder mehrere ausführbare Anweisungen zum Realisieren der spezifischen logischen Funktion(en) aufweist. Es soll zudem angemerkt werden, dass bei einigen alternativen Realisierungen die in den Blöcken angegebenen Funktionen in anderer Reihenfolge als der in den Figuren angegebenen auftreten können. Zum Beispiel können zwei aufeinander folgend abgebildete Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal abhängig von der betreffenden Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es wird ebenfalls angemerkt, dass jeder Block der Blockschaubilder und/oder des Ablaufplans und Kombinationen von Blöcken in den Blockschaubildern und/oder der Abbildung von Ablaufplänen durch zweckbestimmte hardwaregestützte Systeme oder Kombinationen von zweckbestimmter Hardware und Computeranweisungen realisiert werden kann, welche die angegebenen Funktionen oder Handlungen durchführen.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
- US 7426720 [0007]
- US 4742450 [0008]
- US 7536525 [0009]
- US 7657888 [0010]
- WO 2007/036072 [0011]
- US 2010/0223613 [0012]
- US 7421698 [0013]
-
Zitierte Nicht-Patentliteratur
-
- „Cloneable JVM: A new approach to start isolated Java Applications Faster” von Kawachiya, Ogata, Silva, Hideaki, Nakatani [0014]