Java de tests unitaires: comment mesurer l'empreinte mémoire de l'appel de la méthode

En supposant que j'ai une classe qui fait une forte transformation, d'exploitation avec plusieurs collections. Ce que je veux faire est de s'assurer que cette opération ne peut pas conduire à l'extérieur de la mémoire ou même mieux, j'ai envie de mettre un seuil de combien de mémoire il peut utiliser.

class MyClass()
{
   public void myMethod()
   {
      for(int i=0; i<10000000; i++)
      {
         //Allocate some memory, may be several collections
      }
   }
}

class MyClassTest
{
   @Test
   public void myMethod_makeSureMemoryFootprintIsNotBiggerThanMax()
   {
      new MyClass().myMethod(); 
      //How do I measure amount of memory it may try to allocate?
   }
}

Quelle est la bonne approche pour ce faire? Ou ce n'est pas possible/pas possible?

  • P.: Arriver globale de l'utilisation de la mémoire ne vous autorise pas à dire ce que la mémoire a été utilisé pour.
  • Yep, mais je peux définir l'exigence comme "cet algorithme ne doit pas consommer plus de 100 ko de RAM, ne doit pas dépendre de la taille des données à traiter". L'idée est de faire respecter ce par la création explicite de test de l'unité.
  • Mais pourquoi souhaitez-vous créer une telle exigence? Les ressources sont à bas prix, Java est conçu en direction de ce fait. Vous ne devriez pas vous soucier de la consommation de mémoire jusqu'à ce que vous avez un problème réel. Autre que cela, même si vous trouvez un moyen de mesurer la mémoire, vous n'avez pas encore un moyen de mesure d'interpréter correctement les résultats et vous avez créé un réaliste de l'environnement de travail afin de produire des résultats plus réalistes. Il vous suffit de faire "un certain nombre" et de ne pas être plus sage, vraiment.
  • Où est le mal si certains curieux dev est d'essayer de mesurer deux approches - t-il réaliste de travail env avant de faire tous les sens - je ne crois pas. Certaines approches prennent en général beaucoup moins de mémoire/CPU, ou les deux, dans quelque circonstance que les autres. Une telle analyse peut venir dans maniable pour au moins avoir une idée approximative.
  • sont bon marché" est un peu présomptueux commentaire lorsque vous ne connaissez pas les infrastructures et la dotation budgétaire pour la solution