Maison  >  Article  >  Java  >  Quelle est la différence entre tas et pile

Quelle est la différence entre tas et pile

青灯夜游
青灯夜游original
2022-11-22 16:12:509678parcourir

Différence : 1. L'espace du tas est généralement alloué et libéré par le programmeur tandis que l'espace de la pile est automatiquement alloué et libéré par le système d'exploitation ; 2. Le tas est stocké dans le cache de deuxième niveau et le cycle de vie est déterminé par l'algorithme de récupération de place de la machine virtuelle, tandis que la pile utilise le cache de premier niveau, qui se trouve généralement dans l'espace de stockage lorsqu'elle est appelée. , et est libéré immédiatement après la fin de l'appel. 3. Les structures de données sont différentes. Le tas peut être considéré comme un arbre, tandis que la pile est une structure de données premier entré, dernier sorti.

Quelle est la différence entre tas et pile

L'environnement d'exploitation de ce tutoriel : système windows7, version java8, ordinateur DELL G3.

Les concepts de tas et de pile :

 Les piles sont deux structures de données. Une pile est une structure de données dans laquelle les éléments de données sont organisés dans l'ordre. Les éléments de données ne peuvent être insérés et supprimés qu'à une extrémité (appelée haut de la pile). Dans les applications de microcontrôleur, la pile est une zone de stockage spéciale dont la fonction principale est de stocker temporairement des données et des adresses, et est généralement utilisée pour protéger les points d'arrêt et les scènes. Points clés : tas, priorité de file d'attente, premier entré, premier sorti (FIFO – premier entré, premier sorti). Empiler, premier entré, dernier sorti (FILO—First-In/Last-Out).

La différence entre le tas et la pile :

1. Différence dans l'allocation de l'espace de la pile :

1. Pile (système d'exploitation) : automatiquement allouée et libérée par le système d'exploitation, stockant les valeurs des paramètres de fonction, les valeurs des variables locales , etc. Sa méthode de fonctionnement est similaire à la pile dans la structure des données ;

 2. Heap (système d'exploitation) : Il est généralement alloué et libéré par le programmeur. Si le programmeur ne le libère pas, il peut être recyclé par le système d'exploitation lorsque le programmeur le libère. le programme se termine. La méthode d’allocation est similaire à une liste chaînée.

2. Différences dans les méthodes de mise en cache de la pile :

 1. La pile utilise le cache de premier niveau lorsqu'elle est appelée et est libérée immédiatement après la fin de l'appel

 2. Le tas est stocké dans le cache de deuxième niveau. Dans le cache, le cycle de vie est déterminé par l'algorithme de garbage collection de la machine virtuelle (les objets ne peuvent pas être recyclés une fois devenus orphelins). Par conséquent, la vitesse d’appel de ces objets est relativement faible.

3. Différence de structure de données de pile :

Tas (structure de données) : le tas peut être considéré comme un arbre, tel que : tri par tas 

Pile (structure de données) : premier entré, dernier sorti ; structure des données.

Pile et tas en Java :

  La pile et le tas sont des emplacements utilisés par Java pour stocker des données dans Ram. Contrairement au C++, Java gère automatiquement la pile et le tas, et les programmeurs ne peuvent pas définir directement la pile ou le tas.
 Certains types de base de variables et de variables de référence d'objet définies dans la fonction sont alloués dans la mémoire de pile de la fonction. Lorsqu'une variable est définie dans un bloc de code, Java alloue de l'espace mémoire pour la variable sur la pile. Lorsque la portée de la variable est dépassée, Java libère automatiquement l'espace mémoire alloué à la variable, et l'espace mémoire peut être immédiatement récupéré. utilisé. Utilisez-le à d’autres fins.
La mémoire du tas est utilisée pour stocker les objets et les tableaux créés par new. La mémoire allouée dans le tas est gérée par le garbage collector automatique de la machine virtuelle Java. Une fois qu'un tableau ou un objet est généré dans le tas, vous pouvez également définir une variable spéciale dans la pile afin que la valeur de la variable dans la pile soit égale à la première adresse du tableau ou de l'objet dans la mémoire du tas. la pile devient une variable de référence vers un tableau ou un objet. Une variable de référence équivaut à donner un nom à un tableau ou un objet. Vous pouvez ensuite utiliser la variable de référence dans la pile pour accéder au tableau ou à l'objet dans le tas du programme.

Allocation de variables en mémoire en Java :

 1. Variables de classe (variables modifiées par statique) : Lorsque le programme est chargé, le système ouvre de la mémoire pour celui-ci dans le tas, et l'adresse mémoire dans le tas est stockés sur la pile pour plus de commodité pour un accès à grande vitesse. La durée de vie d'une variable statique dure jusqu'à ce que l'ensemble du « système » soit arrêté.

 2. Variables d'instance : lorsque vous utilisez le mot-clé java new, le système alloue de l'espace dans le tas qui n'est pas nécessairement continu aux variables (telles que les instances de classe), puis le hache en fonction des adresses mémoire du tas dispersées. le convertit en une longue chaîne de nombres pour représenter « l'emplacement physique » de cette variable dans le tas. Cycle de vie des variables d'instance – Lorsque la référence à une variable d'instance est perdue, elle sera incluse dans la « liste » recyclable par le GC (garbage collector), mais la mémoire dans le tas ne sera pas libérée immédiatement.

  3. Variables locales : les variables locales sont déclarées dans une certaine méthode ou un certain segment de code (comme une boucle for). Lorsqu'elle est exécutée, la mémoire est allouée sur la pile. Lorsque la variable locale sort de la portée, la mémoire est allouée. la mémoire est immédiatement libérée.

Cela implique des problèmes de mémoire Java, vous pouvez vous référer à : Le mécanisme de mémoire de Java

Tutoriel recommandé : "Tutoriel Java"

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn