2017-08-11 3 views
2

J'utilise le Java Measurement Harness (JMH) pour comparer certaines routines. Je suis intéressé à obtenir la taille de tas maximale de chaque course. Le profileur GC du JMH me donne des informations telles que le taux d'allocation et le taux de désabonnement, mais je cherche le plus gros montant obtenu lors d'un test. Cela peut-il être fait?Taille de segment de mémoire maxmium pour les benchmarks JMH

+0

vous voulez connaître le tas occupé pendant un seul passage d'une méthode? Ou l'ensemble du benchmark? – Eugene

+0

Une seule méthode @Benchmark exécute – ahoffer

+0

c'est ce que je dis ... un '@ Benchmark' est invoqué * plusieurs * fois. Vous voulez une seule invocation de méthode ou * l'ensemble * (toutes les invocations) de '@ Benchmark'? – Eugene

Répondre

0

Vous pouvez implémenter votre propre Profiler:

public class MaxMemoryProfiler implements InternalProfiler { 

    @Override 
    public String getDescription() { 
     return "Max memory heap profiler"; 
    } 

    @Override 
    public void beforeIteration(BenchmarkParams benchmarkParams, IterationParams iterationParams) { 

    } 

    @Override 
    public Collection<? extends Result> afterIteration(BenchmarkParams benchmarkParams, IterationParams iterationParams, 
     IterationResult result) { 

     long totalHeap = Runtime.getRuntime().totalMemory(); // Here the value 
                 // you want to 
                 // collect 

     Collection<ScalarResult> results = new ArrayList<>(); 
     results.add(new ScalarResult("Max memory heap", totalHeap, "bytes", AggregationPolicy.MAX)); 

     return results; 
    } 
} 

et l'ajouter à votre OptionsBuilder:

OptionsBuilder() 
     /* options ... */    
     .addProfiler(MaxMemoryProfiler.class); 

Avec l'option AggregationPolicy.MAX ajouté à la ScalarResult, la sortie sera le résultat maximum de chaque benchmark exécuté.

Par ailleurs, si vous voulez faire des mesures avec la mémoire, un bon article, vous pouvez lire est https://cruftex.net/2017/03/28/The-6-Memory-Metrics-You-Should-Track-in-Your-Java-Benchmarks.html

+0

J'ai écrit mon propre profiler. Mon profileur est très naïf. Il échantillonne la taille du tas toutes les quelques secondes en utilisant la méthode "totalMemory() Merci pour le lien vers l'article! – ahoffer