Maison > Java > javaDidacticiel > Java et le mystère de la mémoire disparue !

Java et le mystère de la mémoire disparue !

Susan Sarandon
Libérer: 2024-11-04 10:56:02
original
755 Les gens l'ont consulté

Dans le pays magique de Java Land vivait un petit robot nommé JVM-bot. Le robot JVM avait une tâche très importante : garder une trace de la mémoire ! Le fait est que la mémoire dans Java Land était comme une grosse boîte à biscuits et tout le monde en voulait un morceau ! Par conséquent, JVM-bot devait s'assurer qu'il y en avait assez pour tout le monde.

Indicateurs magiques : totalMemory, freeMemory et maxMemory !

JVM-bot avait trois indicateurs spéciaux - des outils pour surveiller toute la mémoire :

Java и Тайна Исчезающей Памяти!

totalMemory - Cet indicateur montrait au robot JVM combien de cookies (ou de mémoire) il contient déjà. Cette méthode affiche la quantité actuelle de mémoire allouée par la JVM, ce qui est utile pour comprendre la charge actuelle. Essentiellement, totalMemory est le « budget » de mémoire que nous avons déjà dans notre poche pour utiliser.
freeMemory - Celui-ci lui indiquait combien de cookies il restait dans son pot (dans la mémoire qu'il avait déjà). Cette méthode montre la quantité de mémoire qui peut encore être utilisée dans totalMemory. Par exemple, si totalMemory est de 500 Mo et freeMemory est de 200 Mo, cela signifie que 300 Mo sont déjà utilisés. Cette méthode nous aide à comprendre combien de mémoire libre il y a actuellement et quand nous devrions penser à l'optimiser.
maxMemory - Et c'est le plus grand indicateur de tous ! Il indiquait le nombre maximum de cookies que JVM-bot pouvait jamais avoir. S'il était plein, vous ne pourrez plus ajouter de cookies ! Par exemple, si vous avez fixé le maximum à 1 024 Mo, il s'agit de la limite supérieure, et une fois atteinte, la JVM commencera à utiliser des cookies virtuels (mémoire), ce qui réduira sensiblement les performances.
Voici un exemple de code montrant comment JVM-bot pourrait utiliser ces indicateurs :

public class MemoryExample {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        // Получаем текущую память
        long totalMemory = runtime.totalMemory(); // Общее количество памяти
        long freeMemory = runtime.freeMemory();   // Свободная память
        long maxMemory = runtime.maxMemory();     // Максимально доступная память

        System.out.println("Общая память: " + totalMemory + " байт");
        System.out.println("Свободная память: " + freeMemory + " байт");
        System.out.println("Максимальная память: " + maxMemory + " байт");
    }
}

Copier après la connexion
Copier après la connexion
Copier après la connexion

JVM-bot aimait se considérer comme un gardien des cookies (mémoire), utilisant ses indicateurs pour garder un œil sur les précieuses miettes laissées derrière lui.

Entrée : Gremlins d'algorithme espiègle !

Un jour ensoleillé, JVM-bot s'occupait juste de ses propres affaires, surveillant ses indicateurs, quand tout à coup... BAM ! Un groupe de petits Algorithm Gremlins agiles sont apparus ! Ces gremlins aimaient les cookies autant que le robot JVM, et ils avaient faim !

Ils ont commencé à dévorer les cookies du robot JVM, en prenant une bouchée ici et là. L'indicateur freeMemory de JVM-bot a commencé à baisser rapidement lorsque les gremlins ont mangé les cookies !

Java и Тайна Исчезающей Памяти!

"Oh non!" S'exclama le robot JVM en frottant sa tête robotique. "Si ces gremlins mangent trop de cookies, il n'en restera pas assez pour le reste de Java Land !"

Mesurer l'appétit des Gremlins

JVM-bot a une idée géniale ! Il utilise ses mémoires pour voir combien de cookies mangent les gremlins.

Le robot JVM a d'abord examiné freeMemory pour vérifier combien de cookies il lui restait avant que les gremlins ne commencent à s'en régaler.

long initialFreeMemory = runtime.freeMemory();
System.out.println("Свободная память перед едой гремлинов: " + initialFreeMemory + " байт");

Copier après la connexion

Puis il a dit : "D'accord, Gremlins, voyons ce que tu peux faire !" et laissez-les courir librement en mordant les cookies.

Après que les gremlins aient mangé, le robot JVM a de nouveau vérifié freeMemory :

long remainingFreeMemory = runtime.freeMemory();
System.out.println("Свободная память после еды гремлинов: " + remainingFreeMemory + " байт");

Copier après la connexion

Enfin, JVM-bot a effectué les calculs pour déterminer combien de cookies manquaient. C'était un souvenir que les gremlins ont avalé !

long consumedMemory = initialFreeMemory - remainingFreeMemory;
System.out.println("Съеденная память: " + consumedMemory + " байт");

Copier après la connexion

Super indicateur de mémoire JVM-bot !

Pour garder une trace de tout, JVM-bot s'est construit un indicateur de mémoire ! Cela ressemblait à une boîte à biscuits avec des sections colorées :

Vert pour les cookies déjà mangés (Mémoire utilisée).
Bleu pour les cookies qui sont encore en sécurité dans le pot (Mémoire Libre).
Gris pour les cookies qui risquent de ne jamais cuire (Mémoire maximale).
De cette façon, le robot JVM pouvait garder un œil sur tout et savoir quand il était temps de préparer plus de cookies !

Gros bouton rouge "GC" - L'arme secrète du robot JVM !

Java и Тайна Исчезающей Памяти!
Et enfin, JVM-bot avait un gros bouton rouge qui disait GC (abréviation de Garbage Collection, bien sûr !). C'était son outil d'épluchage de biscuits d'urgence. Si les choses devenaient incontrôlables et que les gremlins laissaient des miettes partout, le robot JVM appuierait sur ce bouton et oups ! - toutes les miettes ont disparu, laissant à nouveau au robot JVM une mémoire propre et fraîche.

Exemple de code pour appeler le garbage collector :

public class MemoryExample {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        // Получаем текущую память
        long totalMemory = runtime.totalMemory(); // Общее количество памяти
        long freeMemory = runtime.freeMemory();   // Свободная память
        long maxMemory = runtime.maxMemory();     // Максимально доступная память

        System.out.println("Общая память: " + totalMemory + " байт");
        System.out.println("Свободная память: " + freeMemory + " байт");
        System.out.println("Максимальная память: " + maxMemory + " байт");
    }
}

Copier après la connexion
Copier après la connexion
Copier après la connexion

Conseils du robot JVM : Comment garder les gremlins de mémoire sous contrôle !

Pour protéger la mémoire, JVM-bot a quelques astuces :

  • Appuyez sur le bouton GC avant de mesurer pour éviter toute miette supplémentaire. L'élimination des débris avant de prendre des mesures permet d'obtenir des résultats plus précis. Ceci, bien sûr, n'est pas toujours nécessaire, mais c'est utile pour la précision des mesures.

  • Ne mesurez pas trop souvent ! JVM-bot ne mesure que lorsque cela est vraiment nécessaire (évitez de mesurer en boucle), sinon ses indicateurs risquent de s'user. Un accès trop fréquent à la mémoire via Runtime peut créer de légers retards. Au lieu de cela, prenez des mesures uniques au début et à la fin de l'algorithme.

  • Utilisez des unités conviviales comme les mégaoctets (Mo) pour que tout le monde puisse comprendre.

Comment mesurer la consommation mémoire d’un algorithme ?

Java и Тайна Исчезающей Памяти!
Pour mesurer la quantité de mémoire qu'un morceau de code spécifique, tel qu'un algorithme, occupe en mémoire, nous avons besoin d'une petite astuce :

Nous mesurons la mémoire initiale avant d'exécuter le code.
Nous exécutons notre algorithme.
Nous mesurons la mémoire après l'exécution.
On retrouve la différence entre les mesures.
L'exemple de code ci-dessous montrera comment cela peut être réalisé :

public class MemoryExample {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        // Получаем текущую память
        long totalMemory = runtime.totalMemory(); // Общее количество памяти
        long freeMemory = runtime.freeMemory();   // Свободная память
        long maxMemory = runtime.maxMemory();     // Максимально доступная память

        System.out.println("Общая память: " + totalMemory + " байт");
        System.out.println("Свободная память: " + freeMemory + " байт");
        System.out.println("Максимальная память: " + maxMemory + " байт");
    }
}

Copier après la connexion
Copier après la connexion
Copier après la connexion

Le robot JVM est donc devenu le héros de Java Land, protégeant le cookie (ou la mémoire) de tout le monde, peu importe le nombre de gremlins essayant de le manger. N'oubliez pas : avec le JVM-bot et ses indicateurs de mémoire, il y aura toujours assez de cookies pour tout le monde dans Java Land ! ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal