Maison >Java >javaDidacticiel >Pourquoi la création d'un thread en Java est-elle considérée comme coûteuse ?
Pourquoi la création d'un fil de discussion est-elle considérée comme coûteuse ?
Bien que les didacticiels Java indiquent que la création d'un fil de discussion entraîne un coût important, la véritable raison derrière cela les dépenses restent floues. Cet article examine les mécanismes de création de threads dans la JVM pour découvrir les facteurs qui contribuent à sa nature coûteuse.
Surcharge dépendante de la plate-forme
La création de threads entraîne des frais généraux varie selon les plateformes. L'établissement d'un thread natif dans le système d'exploitation hôte, l'allocation d'un bloc de mémoire important pour la pile du thread et l'initialisation des structures de données JVM et OS s'ajoutent à cette surcharge.
Consommation des ressources
Une fois créé, un thread natif consomme des ressources considérables tout au long de sa vie. Ceux-ci incluent la pile de threads allouée, les objets accessibles depuis la pile, les descripteurs de thread JVM et les descripteurs de thread natifs du système d'exploitation.
Preuves de référence
Un exercice d'analyse comparative a révélé que la création de threads s'est produit à un rythme d'environ 4 000 par seconde sur un système Xeon à double processeur exécutant Java 1.4.1 en 2002. Alors que les plates-formes modernes offrent des performances améliorées performances, la création de threads reste relativement coûteuse.
Virtual Threads et Project Loom
Les plateformes Java utilisent traditionnellement des threads natifs pour des raisons de performances. Cependant, le projet OpenJDK Loom introduit les threads virtuels comme solution potentielle. Ces threads sont des hybrides qui combinent des threads natifs et des threads verts, visant à réduire la surcharge associée à la création de threads natifs tout en maintenant la concurrence.
Allocation de pile dans OpenJDK
OpenJDK 6 sous Linux, utilise mmap pour allouer de la mémoire de pile à un thread natif via l'appel pthread_create. Cette mémoire est automatiquement initialisée à zéro, conformément aux hypothèses formulées dans la spécification JVM concernant la remise à zéro des nouvelles piles de threads Java.
En résumé, la création de threads est considérée comme coûteuse en raison de la surcharge importante impliquée dans l'établissement d'un nouveau thread. thread natif, allouant un grand bloc de mémoire et consommant diverses ressources tout au long de sa durée de vie. De plus, des facteurs spécifiques à la plate-forme influencent le coût précis de création du fil de discussion.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!