Cet article présente la méthode de calcul de la quantité d'espace que les objets Java occupent. Il est partagé avec vous pour votre référence. Le contenu spécifique est le suivant
1. Tête d'objet
Il y a au moins deux mots à la tête de l'objet. S'il s'agit d'un tableau, alors trois mots sont les suivants:
Ii Règles
Tout d'abord, tout objet est aligné de 8 octets et les propriétés sont stockées dans l'ordre de [long, double], [int, float], [char, short], [octet, booléen] et référence. Par exemple:
Test de classe publique {octet a; int b; Boolean C; Long D; Objet e;}Si les propriétés de cet objet sont stockées dans l'ordre, l'espace à occuper est: tête (8) + a (1) + padding (3) + b (4) + c (1) + padding (7) + d (8) + e (4) + padding (4) = 40. Mais selon cette règle, nous obtenons: tête (8) + d (8) + b (4) + a (1) + c (1) + padding (4) + + + a + a (1) + c (1) + padding (4) + + + a + a (1) + c (1) + padding (4) + + + a + a (1) + C (1) rembourrage (4) = 32. Vous pouvez voir qu'il économise beaucoup d'espace.
En ce qui concerne les relations successives, il existe une règle de base: d'abord, les membres de la classe parent sont stockés, puis les membres de la sous-classe sont stockés. Par exemple:
classe A {long a; int b; int c;} classe B étend un {long d;}L'ordre et l'espace occupés de cette manière sont les suivants: tête (8) + a (8) + b (4) + c (4) + d (8) = 32. Alors, que se passe-t-il si les attributs de la classe parent ne sont pas assez huit octets? Cela donne une nouvelle règle: si l'intervalle entre le dernier membre de la classe parent et le premier membre de la classe infantile n'est pas suffisant pour 4 octets, il doit être étendu à l'unité de base de 4 octets, par exemple:
classe A {octet A;} La classe B étend un {octet b;}Ensuite, l'espace occupé à ce moment est le suivant: tête (8) + a (1) + padding (3) + b (1) + padding (3) = 16. Évidemment, cette méthode est plutôt inutile, donc il y a: si le premier membre de la sous-classe sera double ou long, et que la classe parent n'utilise pas 8 octets, le JVM va enfreindre les règles et remplir les données plus petites dans l'espace, par exemple: par exemple:
classe A {Byte A;} La classe B étend un {long b; court C; octet d;}L'espace occupé à ce moment est le suivant: tête (8) + a (1) + rembourrage (3) + c (2) + d (1) + rembourrage (1) + b (8) = 24.
Ce qui précède est la méthode de calcul de la quantité d'espace que les objets Java occupent. J'espère qu'il sera utile pour tout le monde d'apprendre la programmation Java.