Avez-vous besoin d'une implémentation de Java compatible avec la mémoire?

introduction

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).

Conscience de l'utilisation de la mémoire

À propos du chargement de classe

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.

(Question) Chargement de classe, instanciation, etc ... Dois-je être si conscient de cela?

(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?)

Même les programmeurs finaux doivent être conscients de la mémoire

N'utilisez pas de champs statiques (variables statiques) plus que nécessaire.

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.

Sachez que l'instanciation (nouvelle) est coûteuse.

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é.

(En considération pour la réécriture) ~~ Faire de bonnes méthodes statiques ~~

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;
}
Soyez conscient de l'immuable

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.

Comment l'implémenter à l'avenir

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.

(Bonus) À propos de GC

Il y a copie GC et GC complet. Vous pouvez obtenir un journal GC. (Option Vm)

Plus loin

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.

en conclusion

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é.

Lien d'article

@ 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.

référence

Comment vérifier Qiita --OutOfMemoryError

Recommended Posts

Avez-vous besoin d'une implémentation de Java compatible avec la mémoire?
[Java] Implémentation du réseau Faistel
Implémentation Java de tri-tree
Avez-vous vraiment besoin de cette précharge? ~ Utilisation de la charge retardée ~
Implémentation d'un analyseur de syntaxe mathématique par méthode d'analyse syntaxique descendante récursive (Java)
Pensez à une stratégie de mise à jour Java
Pourquoi vous avez besoin de bundle exec
Trier la liste des objets Java
Pouvez-vous le faire? Java EE
Une brève description des dépendances JAVA
Implémentation d'une fonction similaire en Java
Utilisez-vous Stream en Java?
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Nommer un groupe d'expressions régulières (Java)
Une histoire confirmant l'implémentation de la bibliothèque Java SendGrid lorsque la livraison du courrier échoue
Utilisez-vous l'instruction for après tout? Utilisez-vous l'instruction while? Utilisation correcte des instructions for et while
Mesurer la taille d'un dossier avec Java
Une note quand vous voulez Tuple en Java
[JQuery] Procédure d'implémentation de la fonction de saisie semi-automatique [Java / Spring]
Une collection de questions simples pour les débutants Java
Un examen rapide de Java appris en classe
Implémentation de la fonction de suppression (si vous avez une clé étrangère)
Que faire si vous obtenez une erreur de nombre d'arguments erroné dans binding.pry
Que faire si vous obtenez une erreur NoClassDefFoundError lorsque vous essayez d'exécuter eclipse sur Java 9
[Java] Présentation de Java
[Lire Java efficace] Chapitre 3 Point 12 "Considérer l'implémentation de Comparable"
Obtenir une liste d'informations MBean pour les applications Java
Un examen rapide de Java appris en classe part4
Exemple d'implémentation d'un système de traitement LISP simple (version Java)
Que faire si vous créez accidentellement un modèle
Awesome Java: excellent logiciel de bibliothèque de framework Java
Expérience de réussite de Java Silver en tant que nouveau diplômé
Faisons un robot! "Une simple démo de Java AWT Robot"
[Java] Lors de l'écriture du source ... Mémorandum ①
Un examen rapide de Java appris en classe part3
Un examen rapide de Java appris en classe part2
Une vue d'ensemble du framework Java natif de Kubernetes Quarkus
De quoi avez-vous besoin à la fin pour créer une application Web en utilisant Java? Expliquer le mécanisme et ce qui est nécessaire pour apprendre