Les primitives définies localement seraient sur la pile. Cependant, si une primitive était définie comme faisant partie d'une instance d'un objet, cette primitive serait sur le tas.
public class Test
{
private static class HeapClass
{
public int y; // When an instance of HeapClass is allocated, this will be on the heap.
}
public static void main(String[] args)
{
int x=1; // This is on the stack.
}
}
En ce qui concerne la mise à jour:
Les objets ne possèdent pas leur propre pile. Dans mon exemple, int y
ferait réellement partie de chaque instance de HeapClass
. Chaque fois qu'une instance de HeapClass est allouée (par exemple new HeapClass()
), toutes les variables membres de HeapClass sont ajoutées au tas. Ainsi, puisque des instances de HeapClass
sont allouées sur le tas, int y
serait sur le tas dans le cadre d'une instance de HeapClass
. Cependant, toutes les variables primitives déclarées dans le corps de n'importe quelle méthode seraient sur la pile.
Comme vous pouvez le voir dans l'exemple ci-dessus, int x
est sur la pile car il est déclaré dans un corps de méthode - et non en tant que membre d'une classe.
Chaque thread a sa propre pile, pas chaque objet. S'il n'y a qu'un seul thread, alors il n'y a qu'une seule pile. – Alex