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
Répondre
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
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
vous voulez connaître le tas occupé pendant un seul passage d'une méthode? Ou l'ensemble du benchmark? – Eugene
Une seule méthode @Benchmark exécute – ahoffer
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