[JAVA] Comment fonctionne la mémoire dans les langages orientés objet

Pourquoi j'ai décidé d'écrire un article

J'utilise spring boot au travail, et en DI (Dependency Injection), qui en est le cœur, Le modèle de conception singleton est adopté et une seule instance est créée par défaut. Même si je l'ai recherché sur le net, il y avait un article qui semblait bogué si je l'implémentais pour qu'il ait un état avec spring boot. En y réfléchissant, ça? ?? ?? Une seule instance peut être créée, mais est-ce acceptable si des demandes simultanées sont faites pour une API? Que se passe-t-il ?? ?? J'ai pensé. Peut-être où est l'allocation de mémoire? Quelle période? Je pensais que c'était parce que je ne le comprenais pas, alors je l'ai réorganisé.

Mécanisme de mémoire (basé sur Java)

Tout d'abord, la zone mémoire ・ Zone statique -Zone de tas -Zone de pile

Ensuite, étendez-le à la mémoire (principalement, il y en aura probablement d'autres).

  1. Informations sur le code (corps de la classe)
  2. Variables globales
  3. Instance
  4. Variable d'instance (spécifiée par le constructeur)
  5. Variables locales
  6. Arguments pour chaque méthode
  7. Valeur de retour

Voici un tableau de chacun スクリーンショット 2020-06-20 21.57.09.png

Donc, quand j'y repense, "ne pas avoir d'état" signifie que si vous l'implémentez de manière à ce qu'il ait une variable d'instance, Puisqu'il s'agit d'un buggy, 5, 6 et 7 sont développés dans la zone de pile en tant qu'informations de thread de demande, donc il n'y a pas de souci pour les bogues.

Repenser Singleton

Même si vous regardez à nouveau le modèle de conception d'une seule tonne, cela vous viendra à l'esprit. Créez une seule instance en tant que variable globale, et comme il s'agit d'une variable privée, elle ne sera pas créée à nouveau. En appelant la méthode getInstance (), l'adresse de l'instance développée dans la zone du tas est renvoyée. Si vous ajoutez @Bean, @Controller, @Service et @Component à chaque classe avec l'annotation Spring Boot, il semble que le comportement soit comme ça en interne.

singlton.java


public class Singlton{
private static Singlton singlton = new Singlton();
    private Singlton(){}
    public static Singlton getInstance(){
        return singlton;
    }
}

Bonus: j'y ai pensé dans le monde de NARUTO

● Si vous le comparez avec NARUTO ... Naruto (corps principal): informations sur le code → J'ai différentes techniques. Naruto (corps de l'ombre): Objet → Le travail à faire est différent. Si vous ne relâchez pas le corps régulièrement, le corps Naruto sera à court de chakra (une fuite de mémoire se produira, l'objet sera effacé régulièrement en cas de ramassage des ordures). Comportement de Naruto (alter ego de l'ombre): variables locales, etc. → Actions comme lancer une épée en arrière ou utiliser des techniques.

Conclusion: Qu'est-ce que NARUTO ... object ninja !!!

Recommended Posts

Comment fonctionne la mémoire dans les langages orientés objet
Fonctionnement du servlet Dispatcher dans Spring MVC
Comment fonctionne jul-to-slf4j
Découvrez comment HashMap fonctionne en Java
Arguments de longueur variable dans différentes langues
[Java] Fonctionnement de Spring DI