Heim >Java >javaLernprogramm >Warum gilt das Erstellen eines Threads in Java als teuer?

Warum gilt das Erstellen eines Threads in Java als teuer?

Linda Hamilton
Linda HamiltonOriginal
2024-12-05 07:31:09474Durchsuche

Why is Creating a Thread in Java Considered Expensive?

Warum gilt die Thread-Erstellung als kostspielig?

Während in den Java-Tutorials angegeben wird, dass die Erstellung eines Threads erhebliche Kosten verursacht, ist dies der eigentliche Grund dafür Die Kosten blieben unklar. Dieser Artikel befasst sich mit den Mechanismen der Thread-Erstellung in der JVM, um die Faktoren aufzudecken, die zu ihrer kostspieligen Natur beitragen.

Plattformabhängiger Overhead

Die Thread-Erstellung bringt einen Overhead mit sich variiert je nach Plattform. Das Einrichten eines nativen Threads innerhalb des Host-Betriebssystems, die Zuweisung eines großen Speicherblocks für den Thread-Stack und die Initialisierung von JVM- und Betriebssystem-Datenstrukturen tragen zu diesem Overhead bei.

Ressourcenverbrauch

Einmal erstellt, verbraucht ein nativer Thread während seiner gesamten Lebensdauer erhebliche Ressourcen. Dazu gehören der zugewiesene Thread-Stack, vom Stapel aus zugängliche Objekte, JVM-Thread-Deskriptoren und native Thread-Deskriptoren des Betriebssystems.

Benchmark-Beweise

Eine Benchmarking-Übung ergab, dass Threads erstellt wurden trat im Jahr 2002 mit einer Geschwindigkeit von etwa 4000 pro Sekunde auf einem Xeon-System mit zwei Prozessoren auf, auf dem Java 1.4.1 ausgeführt wurde. Moderne Plattformen bieten zwar Verbesserungen Leistung, Thread-Erstellung bleibt relativ teuer.

Virtuelle Threads und Project Loom

Java-Plattformen haben traditionell aus Leistungsgründen native Threads eingesetzt. Das OpenJDK Loom-Projekt führt jedoch virtuelle Threads als mögliche Lösung ein. Diese Threads sind Hybride, die native Threads und grüne Threads kombinieren, mit dem Ziel, den mit der nativen Thread-Erstellung verbundenen Overhead zu reduzieren und gleichzeitig die Parallelität aufrechtzuerhalten.

Stack-Zuweisung in OpenJDK

OpenJDK 6 unter Linux verwendet mmap, um über den pthread_create-Aufruf Stapelspeicher für einen nativen Thread zuzuweisen. Dieser Speicher wird automatisch auf Null initialisiert, was den Annahmen in der JVM-Spezifikation bezüglich der Nullsetzung neuer Java-Thread-Stacks entspricht.

Zusammenfassend lässt sich sagen, dass die Thread-Erstellung aufgrund des erheblichen Overheads, der mit der Einrichtung eines neuen verbunden ist, als teuer angesehen wird nativer Thread, der einen großen Speicherblock zuweist und im Laufe seiner Lebensdauer verschiedene Ressourcen verbraucht. Darüber hinaus beeinflussen plattformspezifische Faktoren die genauen Kosten der Thread-Erstellung.

Das obige ist der detaillierte Inhalt vonWarum gilt das Erstellen eines Threads in Java als teuer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn