Mesure de la mémoire d'utilisation des instances en Java

Analyse de la taille de la mémoire utilisée pour chaque instance

Dans l'article précédent (https://qiita.com/N_G/items/2dab8694fdebce2de868), j'ai décrit comment vérifier l'état d'utilisation de la mémoire dans une application Java. Cette fois, après avoir compris le processus qui utilise la mémoire, j'aimerais mesurer la quantité de mémoire utilisée par chaque instance.

Introduction de la bibliothèque java-sizeof

Il existe plusieurs bibliothèques qui mesurent la taille de Java, mais cette fois, nous utiliserons la bibliothèque ** java-sizeof **. Une bibliothèque développée par CARROT SEARCH LAB

Il existe des avantages tels que. Téléchargez le fichier jar depuis Maven epository. Si vous utilisez Maven, mettez ce qui suit dans votre fichier pom.xml: Pour la version, spécifiez la version que vous souhaitez installer. Cet article utilise "0.0.5".

<dependency>
    <groupId>com.carrotsearch</groupId>
    <artifactId>java-sizeof</artifactId>
    <version>{version}</version>
</dependency>

Comment utiliser

Maintenant, je voudrais mesurer la taille de la mémoire en utilisant la bibliothèque java-sizeof. Appelez simplement la fonction * RamUsageEstimator.sizeOf * pour l'instance que vous souhaitez mesurer comme suit.

Exemple de code

import com.carrotsearch.sizeof.RamUsageEstimator;
import java.util.ArrayList;
import java.util.List;

public class JavaSizeofTest
{
    public static void main( String[] args )
    {
    	int[] intArray = new int[10];
    	List<Integer> intList = new ArrayList<Integer>(10);

    	for(int i = 0 ; i < 10 ; i++){
    		intArray[i] = i;
    		intList.add(i);
    	}

    	System.out.println("intArray size(byte) -> " + RamUsageEstimator.sizeOf(intArray));
        System.out.println("intList size(byte) -> " + RamUsageEstimator.sizeOf(intList));
    }
}

production

intArray size(byte) -> 56
intList size(byte) -> 240

J'ai la taille de l'instance.

Mesure de la mémoire pour les instances de classes propriétaires

Vous pouvez également mesurer la mémoire de votre propre instance de classe à l'aide de la méthode ci-dessus. Vous pouvez connaître de manière récursive la taille de la somme des tailles de toutes les variables membres.

Exemple de code

package so_netmedia.java_sizeof_test;

import com.carrotsearch.sizeof.RamUsageEstimator;
import java.util.ArrayList;
import java.util.List;

public class JavaSizeofTest2
{
    static class MyClass{
        int[] intArray = new int[10];
        List<Integer> intList = new ArrayList<Integer>(10);

        public MyClass(){
            for(int i = 0 ; i < 10 ; i++){
                intArray[i] = i;
                intList.add(i);
            }
        }
    }

    public static void main( String[] args )
    {
    	MyClass myInstance = new MyClass();
    	System.out.println("myInstance size(byte) -> " + RamUsageEstimator.sizeOf(myInstance));
    }
}

production

myInstance size(byte) -> 320

C'est la somme de la taille de l'instance précédente plus la surcharge de la classe.

Dimensionnement en application

En effectuant la mesure de mémoire ci-dessus sur une instance qui semble être de grande taille et en produisant un journal, il est possible d'étudier la quantité de mémoire utilisée dans quelle instance. Découvrez les instances qui consomment de la mémoire et réduisent la mémoire. Une dernière chose à noter est qu'il faut un certain temps pour mesurer la mémoire de ** grandes instances. ** N'oubliez pas de contrôler, comme la mesure dans l'environnement de préparation et le saut en production.

Recommended Posts

Mesure de la mémoire d'utilisation des instances en Java
Examiner l'utilisation de la mémoire des éléments Java
Partition en Java
[Développement Java] Mémoire Java
Changements dans Java 11
[Java] Instance d'exception
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
Organisation des notes dans la tête (Java - édition d'instance)
Java n ° 3 pour l'utilisation de la mémoire de flux utile pour les entreprises
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Comment utiliser les variables Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
[AWS] Lier l'utilisation de la mémoire de l'instance Ubuntu EC2 à CloudWatch
Essayez d'utiliser RocksDB avec Java
À propos des instances Java
Lire des fichiers binaires en Java 1
[Java] Utilisation de Mirage-Basic de SQL
Évitez l'erreur que Yuma a donnée en Java
Obtenir des informations EXIF en Java
[Neta] Sleep Sort en Java
Modifier ini en Java: ini4j
L'histoire de Java dans ce monde
Segfo Java en 6 lignes
Essayez d'appeler JavaScript en Java
Essayez de développer Spresense avec Java (1)
Essayez le type fonctionnel en Java! ①
J'ai fait une roulette à Java.