Nous avons souvent une telle confusion en programmation : certaines fonctions sont résolues à l’aide de singletons, et d’autres fonctions par des méthodes statiques, alors quels sont les principes et scénarios d’utilisation des méthodes statiques et des singletons ? Clarifions la question aujourd’hui.
1. Commençons par voir la différence entre les méthodes statiques et les méthodes non statiques ?
Beaucoup de programmeurs comprennent que les méthodes statiques se chargent en premier, les méthodes non statiques se chargent ensuite, les méthodes statiques existent toujours en mémoire, et les méthodes non statiques non. Il est donc recommandé d’utiliser une méthode non statique. Tout d’abord, il est erroné d’insister sur le fait que cette compréhension est erronée.
Tout d’abord, analysons de mémoire : lorsque l’application est initialisée, le CLR (CLR est le Common Language Runtime) est aussi un environnement d’exécution similaire à la machine virtuelle Java, responsable de la gestion des ressources (allocation mémoire et collecte des ordures, etc.) et assure la séparation nécessaire entre l’application et le système d’exploitation sous-jacent. Le CLR a deux noms de traduction différents : Common Language Runtime et Common Language Runtime. Alloue un espace d’adressage à chaque processus dans l’espace disponible du processus, qui est le tas géré. Le tas géré est divisé en plusieurs régions, les plus importantes étant le tas de collecte des déchets (GC Heap) et le tas de chargement (Loader Heap), qui est utilisé pour stocker les instances d’objets et est géré par le GC. Les informations les plus importantes que le tas de chargement stocke via la table MethodTable sont les métadonnées, telles que les types de base, les champs statiques, les interfaces d’implémentation et toutes les méthodes. Le tas de chargement n’accepte pas le contrôle du GC, et son cycle de vie va de la création à la destruction. En d’autres termes, une fois qu’une classe est chargée, les méthodes statiques et non statiques de cette classe sont stockées dans la table MethodTab du tas de charge, sans contrôle GC, et elles résident toutes en mémoire lors du premier chargement.
Quelle est la différence entre une méthode statique et une méthode non statique ? La différence est que lors de la création d’un objet, la méthode statique ne possède qu’une copie, tandis que la méthode non statique copie une copie des informations concernant cette instance sur le tas GC pour chaque nouvel objet, tout en plaçant le nouvel objet sur la pile. L’adresse pointée par le pointeur de pile est l’adresse mémoire qui vient d’être copiée dans le tas GC. Ainsi, en termes de vitesse d’appel de méthode, les méthodes statiques sont plus rapides car les méthodes non statiques doivent être instanciées et allouer de la mémoire.
Du point de vue de l’histoire de la programmation, presque toutes les méthodes de programmation structurée précoce étaient des méthodes statiques, et l’introduction des méthodes d’instanciation était une question de programmation orientée objet, donc la méthode d’instanciation ne devait pas résoudre le problème de l’efficacité et de la mémoire en fonctionnement. Il s’agit de rendre le développement plus structuré et orienté objet.
De l’analyse ci-dessus, on peut tirer une conclusion : 1. La méthode statique et la méthode non statique font la distinction entre le mode solution. 2. Si l’héritage, le polymorphisme, ou si une méthode n’a rien à voir avec l’objet de sa classe, vous devez choisir une méthode statique, comme une classe outil.
2. Quelle est la différence entre le mode singleton et la méthode statique ?
Il nous arrive parfois de maintenir une information en ingénierie, comme certains attributs de configuration chargés à l’exécution, qui doivent exister tout au long de la durée de vie de l’application et sont publics, donc une seule copie est nécessaire. Pour l’instant, nous envisagerons d’utiliser une méthode singleton ou statique pour maintenir ces données, mais pour l’instant, ces données sont obtenues de manière orientée objet, nous utiliserons un singleton.
Premièrement, les méthodes statiques sont basées sur des classes, et les singletons sont basés sur des objets. Si le motif de résolution est basé sur un objet, utilisez un singleton, sinon une approche statique. Par exemple, il faut hériter des classes, implémenter des interfaces, retarder l’initialisation, réécrire les classes parentes, etc. pour utiliser les singletons ; deuxièmement, les méthodes statiques sont orientées processus, et les singletons sont orientés objet. Troisièmement, les variables d’attribut statiques ne seront pas effacées par GC, donc les objets singleton ne seront pas effacés par GC, et les objets générés dans des méthodes statiques seront libérés lorsque la méthode statique sera exécutée. |