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.
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>
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.
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));
}
}
intArray size(byte) -> 56
intList size(byte) -> 240
J'ai la taille de l'instance.
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.
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));
}
}
myInstance size(byte) -> 320
C'est la somme de la taille de l'instance précédente plus la surcharge de la classe.
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