Les méthodes et variables statiques jouent un rôle crucial dans la programmation orientée objet en fournissant une identité partagée dans toutes les instances de une classe. Contrairement aux variables d'instance, les variables statiques n'existent qu'une seule fois par classe, quel que soit le nombre d'objets créés. De même, les méthodes statiques sont des méthodes au niveau de la classe accessibles directement depuis la classe elle-même, sans nécessiter la création d'une instance de la classe.
Alors, où sont les méthodes statiques et les variables stockées en Java ? La réponse réside dans le concept de Génération Permanente (PermGen) ou MetaSpace. Dans les anciennes versions de Java (avant Java 8), PermGen faisait partie de la mémoire tas dédiée au stockage des métadonnées liées aux classes, y compris les variables statiques et le code de méthode. Cependant, depuis Java 8, PermGen a été remplacé par Metaspace, qui sert le même objectif.
Variables statiques
Les variables statiques sont simplement stockées dans la section PermGen ou MetaSpace du tas. Chaque variable statique occupe une adresse mémoire spécifique où sa valeur est stockée.
Méthodes statiques
Les méthodes statiques sont stockées dans le cadre des données de classe dans la région PermGen ou MetaSpace . Le code de la méthode et les métadonnées associées, telles que les types d'arguments et le type de retour, sont compilés en bytecode et placés dans cette zone mémoire dédiée.
Considérez le code Java suivant :
class A { static int i = 0; static int j; static void method() { // static k = 0; // This won't compile } }
Dans cet exemple, les variables statiques i et j seront stockées dans la région PermGen ou MetaSpace du tas. La méthode statique method() sera également stockée dans la même zone mémoire dans le cadre des métadonnées de la classe.
Les variables et méthodes statiques existent de manière persistante quel que soit le cycle de vie de l'individu. objets de la classe. Ils ne sont pas éligibles au garbage collection à moins que la classe entière elle-même ne soit déchargée de la mémoire. Cela signifie qu'ils peuvent potentiellement rester en mémoire indéfiniment, même si la classe n'est plus utilisée par aucun objet actif.
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!