Il y a trois choses qui doivent se produire avant de pouvoir « utiliser » une instance d'une classe, chacun qui implique l'allocation de la mémoire de tas:
Les classes bytecode doivent être chargées et liées à résoudre tout dépendances statiques sur d'autres classes. La classe doit être initialisée. Une instance de la classe doit être créée. Le chargement et la liaison de classes se produisent généralement lorsque vous démarrez la JVM, bien que la JVM puisse le faire "paresseusement", et cela peut être fait dynamiquement; par exemple. en utilisant Class.forName (...). C'est quand la mémoire pour les classes "code" est allouée.
L'initialisation de classe est normalement effectuée immédiatement avant la première utilisation de la classe. (Les détails précis sont énoncés dans le JLS). C'est à ce moment que la mémoire pour les classes de statique sera allouée.
La création de classe se produit lorsque la nouvelle construction est utilisée. Cela déclenchera également l'initialisation de classe pour une classe qui n'a pas encore été initialisée. C'est à ce moment que la mémoire d'une instance est allouée
Qu'est-ce qu'une 'session'? –
ClassLoaders ne gère pas l'instanciation d'objet, ni même l'initialisation de classe. Tout ce qu'ils font est * charger * classes et fournir un accès aux ressources. Le singleton n'est pas non plus une caractéristique de classe reconnue par Java; il s'agit plutôt d'une caractérisation des implémentations de certaines classes. –
Qu'est-ce que vous voulez vraiment savoir? S'il peut y avoir plus d'une instance d'une classe non-singleton? La réponse devrait être assez évidente, non? –