Le livre du compilateur (The dragon book) explique que les types de valeur sont créés sur la pile, et les types de référence sur le tas.
Pour Java, la JVM contient également le tas et la pile dans la zone de données d'exécution. Les objets et les tableaux sont créés sur le tas, les cadres de méthode sont poussés sur la pile. Un tas est partagé par tous les threads, tandis que chaque thread a sa propre pile. Le schéma suivant illustre cette situation :
En savoir plus Zones de données d'exécution Java .
Ce que je ne comprends pas, c'est que, puisque la JVM est essentiellement un logiciel, comment le tas, la pile et les threads de la JVM sont-ils mappés à la machine physique ?
J'apprécierais que quelqu'un puisse comparer ces concepts entre Java et C++. Parce que Java fonctionne sur JVM, mais pas le C++.
Pour rendre cette question plus précise, je voudrais savoir ce qui suit :
- En comparaison avec Java, à quoi ressemble la zone de données d'exécution du C++ ? Une image serait utile, je n'arrive pas à trouver une bonne image comme celle de la JVM ci-dessus.
- Comment le tas, la pile, les registres et les threads de la JVM sont-ils mappés au système d'exploitation ? ou devrais-je demander comment ils sont mappés à la machine physique ?
- Est-il vrai que chaque thread de la JVM est simplement un thread d'utilisateur et qu'il est mappé au noyau d'une certaine manière ? (thread utilisateur vs thread noyau)
Mise à jour : Je dessine une image pour la mémoire physique d'exécution d'un processus.
3 votes
La plupart des threads ne font que correspondre aux threads du système d'exploitation, auquel cas ils obtiennent leur propre pile, comme n'importe quel thread du système d'exploitation.
0 votes
@radai Super, merci pour le commentaire ! Pouvez-vous en dire plus en comparant Java et C++ ?
0 votes
Je ne connais pas bien le c++ pour faire la comparaison, je ne connais que la partie java.