Heim >Java >javaLernprogramm >Warum gilt das Erstellen eines Threads in Java als teuer?
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!