Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Pile et tas Java :didacticiel sur l'allocation de mémoire Java

Qu'est-ce que la mémoire de pile ?

Stack en Java est une section de mémoire qui contient des méthodes, des variables locales et des variables de référence. La mémoire de la pile est toujours référencée dans l'ordre Dernier-Entré-Premier-Sorti. Les variables locales sont créées dans la pile.

Qu'est-ce que la mémoire de tas ?

Heap est une section de mémoire qui contient des objets et peut également contenir des variables de référence. Les variables d'instance sont créées dans le tas

Allocation de mémoire en Java

Allocation de mémoire en Java est le processus dans lequel les sections de mémoire virtuelle sont mises de côté dans un programme pour stocker les variables et les instances de structures et de classes. Cependant, la mémoire n'est pas allouée à un objet lors de la déclaration mais seule une référence est créée. Pour l'allocation de mémoire de l'objet, la méthode new() est utilisée, de sorte que l'objet se voit toujours allouer de la mémoire sur le tas.

L'allocation de mémoire Java est divisée en sections suivantes :

  1. Tas
  2. Empiler
  3. Code
  4. Statique

Cette division de la mémoire est nécessaire à sa gestion efficace.

Différence entre variable locale et variable d'instance

Variable d'instance est déclaré à l'intérieur d'une classe mais pas à l'intérieur d'une méthode

class Student{ 
int num; // num is  instance variable 
public void showData{}

Variable locale sont déclarés à l'intérieur une méthode comprenant méthode arguments .

public void sum(int a){

int x = int a +  3;

// a , x are local variables;

}

Différence entre pile et tas

Cliquez ici si la vidéo n'est pas accessible

Prenons un exemple pour mieux comprendre cela.

Considérez que votre méthode principale appelant la méthode m1

public void m1{
int x=20
}

Dans la pile java, un cadre sera créé à partir de la méthode m1.

La variable X dans m1 sera également créée dans le cadre pour m1 dans la pile. (Voir l'image ci-dessous).

La méthode m1 appelle la méthode m2. Dans la pile java, un nouveau cadre est créé pour m2 au-dessus du cadre m1.

Les variables b et c seront également créées dans un cadre m2 dans une pile.

public void m2(int b){
boolean c;
}

La même méthode m2 appelle la méthode m3. Encore une fois, un cadre m3 est créé sur le dessus de la pile (voir image ci-dessous).

Supposons maintenant que notre méthode m3 crée un objet pour la classe "Account", qui a deux instances variables int p et int q.

Account {
             Int p;
             Int q;
       }

Voici le code de la méthode m3

public void m3(){
	Account ref = new Account();
	// more code
}

L'instruction new Account() créera un objet de compte dans le tas.

La variable de référence « ref » sera créée dans une pile java.

L'opérateur d'affectation "=" fera une variable de référence pour pointer vers l'objet dans le tas.

Une fois que la méthode a terminé son exécution. Le flux de contrôle reviendra à la méthode appelante. Qui dans ce cas est la méthode m2.

La pile de la méthode m3 sera vidée.

Étant donné que la variable de référence ne pointera plus vers l'objet dans le tas, elle sera éligible pour la récupération de place.

Une fois que la méthode m2 a terminé son exécution. Il sera sorti de la pile, et toutes ses variables seront vidées et ne seront plus utilisables.

De même pour la méthode m1.

Finalement, le flux de contrôle reviendra au point de départ du programme. Ce qui est généralement la méthode "principale".

Et si Object a une référence comme variable d'instance ?

public static void main(String args[]) {
  A parent = new A(); //more code } class A{ B child = new B(); int e; //more code } class B{ int c; int d;  //more code }

Dans ce cas, la variable de référence "enfant" sera créée dans le tas, qui à son tour pointera vers son objet, quelque chose comme le schéma ci-dessous.

Résumé :


Java

  1. Variables et littéraux Java
  2. Classe et objets Java
  3. Classe abstraite Java et méthodes abstraites
  4. Classe imbriquée et interne Java
  5. Java lancer et lancer
  6. Types d'annotations Java
  7. Autoboxing et déballage Java
  8. Méthode Java String replace(), replaceAll() et replaceFirst()
  9. Java - Remplacement