Java-Theorie & Praxis: Garbage-Collection im der 1.4.1 JVM

June 14

Entwickler, die Java mit zwei primäre Ziele vor Augen geschaffen. Erstens, eine Programmiersprache gebaut ganz nach einer objektorientierten Paradigma zu erstellen. Zweitens die Java zu Sprache führen Sie auf der Java Virtual Machine (JVM) Cross-Plattform Portabilität sichergestellt. Da Java auf der JVM lief und nicht direkt mit Hardware Schnittstelle, konnte die JVM viele der Probleme in der objektorientierten Programmierung, nämlich Speicherverwaltung verwalten. Der Prozess über dem Speicher die JVM erfolgt heißt "Garbagecollection". Um die Sammlung zu verstehen, muss ein Programmierer verstehen objektorientierter Programmierkonzepte, einschließlich wie Speicher verwaltet wird.

Objektorientierte Programmierung

Objektorientierte Programmierung (OOP) ist ein Paradigma der Programmierung in dem Programmierer Daten erstellen "Objekte" im Zuge ihres Codes. Programmierer verwenden diese Objekte, um komplexe Datentypen darstellen, die enthalten beide einen Zustand und zeigen bestimmte Verhaltensweisen. Also beispielsweise erstellt ein Programmierer eine "Kugel"-Klasse für ein Programm, das funktioniert bei denen Berechnungen der Sphären. Die Kugel-Klasse kann Daten für einen Radius (der Staat) und eine Funktion zur Berechnung eigener Fläche (das Verhalten) enthalten.

Objekte und Speicher

Java und C++ sind OOP-Sprachen. Jedoch veranschaulicht den Unterschied zwischen den beiden die Notwendigkeit für die Garbagecollection in Java. Beschäftigt sich in C++ Programmierer direkt mit dem Betriebssystem. Dies bedeutet, dass wenn ein Programmierer ein Objekt erstellen möchte, können sie eines von zwei Dingen zu tun. Zunächst können sie eine "flache" Kopie während der Codierung Prozess erstellen. Zweitens und häufiger, können sie Code schreiben, die dynamisch erstellt Objekte im "tief" Speicher während der Codeausführung durch den Einsatz von "Pointer."

Zeigern und Speicherverlusten

Ein C++-Programm verwendet Zeiger während der Codeausführung Speicher zuordnen. Ein "Zeiger" enthält eine Referenz auf einen Speicherbereich. Wenn ein Programmierer muss Code zu entwerfen, die Objekte zur Laufzeit erstellt, verwendet er Zeiger auf um Speicher für die Objekterstellung beiseite zu verweisen. Dieser Zeiger ist dann die einzige Sache, die dieses Objekt verweist. Das Programm während der Ausführung der Zeigerverweis bewegen soll, das Objekt "wies auf" kann nicht mehr verwendet werden. Es sitzt einfach im Speicher mit keine Möglichkeit, darauf zuzugreifen. Wenn große Mengen von Objekten über Zeiger erstellt und im Speicher durch Verlust von Zeigerverweis verlassen, dies ist bekannt als ein "Memory Leak" und kann schwerwiegende Probleme verursachen, in einem Programm.

Garbagecollection

In C++ fällt die Verantwortung der Verwaltung von Speicher und die Verhinderung von Speicherlecks quadratisch auf der Programmierer. Die Java-Sprache, im Gegensatz zu C++, läuft auf der JVM, abstrahiert vom Betriebssystem. Aus diesem Grund kann der Programmierer System Speicherverwaltung in Bezug auf Objekte ignorieren. Vielmehr die JVM hält Registerkarten auf bestehende Objekte und Referenzen und löscht diejenigen, die nicht mehr verwendet werden. Auf diese Weise die Aufgabe der Verwaltung von Speicher fällt auf die JVM und der Programmierer arbeiten kann verschiedene Aufgaben während zuversichtlich, die Speicherverwaltung ist gesorgt.

Garbagecollection und der 1.4.1 JVM

Die 1.4.1 Version der JVM bietet ein Modell für die Garbagecollection. Die JVM verwendet ein Alter Teilung Paradigma, während "jung" und "alten" Objekte im Speicher vorhanden ist. Die JVM kann fördern junge Objekte an alten Objekten basierend auf wie oft die junge Objekte während der Programmausführung kopiert werden. Alte Objekte, dann gelten als wichtig und daher nicht zum Löschen markiert. Die 1.4.1 JVM-Garbage-Collection-System verwendet eine "Zug" Sammlung/Löschung, dadurch, dass steigende kleine Müll Auflistung übergibt anstatt größeren, langsameren Sammlungen. Außerdem nutzt die 1.4.1 JVM Mehrprozessoren-Systeme bietet die gleichzeitige Garbagecollection auf mehreren Prozessoren.