Un mémorandum de ce que j'ai appris parce que j'ai consulté mes réflexions sur la mémoire. Quant aux termes, j'écris les parties que je connais telles qu'elles sont. Au contraire, s'il semble être mal utilisé, veuillez le signaler (et me le faire savoir).
Lors de l'exécution principale (ou lorsqu'une classe qui a une fonction main avant d'être interprétée par jvm), Chargez la classe associée en mémoire à la manière d'un ver.
(Cela peut être frappé selon la façon dont vous y pensez) ** Vous n'avez pas besoin d'en être conscient. Parce que le langage Java est un langage dont les implémenteurs n'ont pas à être conscients de la gestion de la mémoire (dans cette mesure). Cette zone est écrite sur wikipedia. [Java # Garbage Collection-Wikipedia](https://ja.wikipedia.org/wiki/Java#%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3% 82% B3% E3% 83% AC% E3% 82% AF% E3% 82% B7% E3% 83% A7% E3% 83% B3)
Si vous êtes conscient de la gestion de la mémoire, vous parlerez de l'implémentation d'une JVM. (Si vous voulez le gérer complètement, devez-vous utiliser C ou C ++ en premier lieu?)
Vous devez être conscient du côté droit du champ statique. Le champ statique est créé lorsque la classe est chargée. Si un traitement lourd est placé sur le côté droit (initialisation), cela entraînera une pression de mémoire. Les variables d'instance, les initialiseurs statiques et les initialiseurs doivent également être pris en charge.
La création d'instance consiste à allouer un tas et à créer un objet. (Exécution des variables d'instance, des méthodes d'instance, des initialiseurs) Évidemment, cela coûte de l'argent à chaque fois qu'il est généré.
S'il n'y a pas d'effets secondaires, l'électricité statique est meilleure car elle ne coûte pas cher à générer. L'effet secondaire mentionné ici est de savoir s'il peut être créé indépendamment de l'état de l'instance. Je comprends que la classe dite Util peut être utilisée de manière positive. (Puisque la classe est chargée lorsque la méthode principale est exécutée, aucun coût de génération n'est requis)
public static int plus(int a, int b){
retrun a + b;
}
Il y a une controverse immuable.
Qu'est-ce qui est immuable? Objets immuables (immuables) et mutables (mutables).
Des exemples typiques en Java sont String
, LocalDateTime
, etc.
Il semble que les affirmatifs et les négatifs aient une discussion animée sur ce jour et cette nuit.
** Affirmative: ** Garder les valeurs non mises à jour rend le programme sûr. De plus, même si vous créez une nouvelle instance, l'instance d'origine ne devrait pas être nécessaire, elle sera donc publiée par copie GC selon le cas.
** Négatif: ** Coût de création inutile de l'instance. (Considérant la réécriture) ~~ Risque de fuite de mémoire. ~~
En tant que développeur, ce serait bien de pouvoir implémenter la même valeur afin qu'elle regarde la même référence que String, mais il serait difficile de la laisser tomber dans la logique, donc je pense qu'il vaut mieux être conscient de l'immuable.
Même si vous n'y pensez pas trop, vous pouvez l'implémenter pour qu'il ne fuit pas de mémoire comme avant. Par exemple, le suivant.
Fondamentalement, tant que Java est utilisé, la gestion de la mémoire est laissée à Java.
Il y a copie GC et GC complet. Vous pouvez obtenir un journal GC. (Option Vm)
On m'a montré le journal GC du système que je développe.
Dans le journal, fullGC s'est produit plusieurs fois au début du démarrage.
(Dans le passé, il semble que la mémoire était spécifiée au moment de l'exécution, mais pour une raison quelconque, elle semble s'être arrêtée maintenant. C'est peut-être parce qu'il s'agissait d'un environnement de test.)
Si je connaissais la ligne la plus basse à utiliser, j'ai pensé que je devrais spécifier l'option vm -Xms
pour empêcher le fullGC de se produire.
Je voudrais étudier à nouveau GC.
J'avais été inquiet à ce sujet pendant environ deux semaines, mais j'ai une fois convergé vers la mémoire Java. J'ai cherché des informations sur Internet et demandé à différentes personnes, mais cela ne m'est pas venu à l'esprit, alors j'ai mis du temps à comprendre. Je suis très reconnaissant aux leaders sur le terrain qui m'ont expliqué soigneusement pendant que j'étais occupé.
@ j5c8k6m8 a lu cet article et a écrit un poème, j'ai donc publié un lien. Qiita - Avez-vous besoin d'une programmation prenant en charge la mémoire (implémentation) Je l'ai lu, mais ce fut une expérience d'apprentissage.
Comment vérifier Qiita --OutOfMemoryError
Recommended Posts