Понимание профилировщика GC в JMH JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Понимание профилировщика GC в JMH Java

Сообщение Anonymous »

Я провожу некоторые эксперименты с использованием Java Microbenchmarking Harness, в частности, использую профилировщик GC. У меня есть три вопроса по поводу интерпретации результатов профилировщика GC.
Вот мой тест:

Код: Выделить всё

@Benchmark
public void benchmarkPiecewiseDNFModel(Blackhole blackhole) {
// Run the method and consume the output to avoid dead code elimination
PiecewiseCausalModel model = creator.PiecewiseDNFModel(users);
blackhole.consume(model);
}
Метод в тесте создает большую коллекцию логических формул в дизъюнктивной нормальной форме. За один прогон этого теста с одной прогревкой я получил следующие результаты:

Код: Выделить всё

Benchmark                                                           (users)  Mode  Cnt            Score   Error   Units
BenchmarkModelCreator.benchmarkPiecewiseDNFModel                         650    ss                77.664            s/op
BenchmarkModelCreator.benchmarkPiecewiseDNFModel:gc.alloc.rate           650    ss               809.123          MB/sec
BenchmarkModelCreator.benchmarkPiecewiseDNFModel:gc.alloc.rate.norm      650    ss       65892091888.000            B/op
BenchmarkModelCreator.benchmarkPiecewiseDNFModel:gc.count                650    ss                61.000          counts
BenchmarkModelCreator.benchmarkPiecewiseDNFModel:gc.time                 650    ss               332.000              ms
Я пытаюсь интерпретировать эти результаты в контексте одной итерации измерения для этого теста. Кажется, я не могу найти четкого ответа на следующие вопросы:
(1) Что именно измеряет профилировщик GC, особенно в gc.alloc.rate. норма? 65 ГБ, о которых сообщается, являются кумулятивным числом, поэтому кажется, что профилировщик GC суммирует распределение памяти непосредственно перед каждым событием сборки мусора >? Это точно? Это средний объем памяти, выделяемый в секунду моей операции?
(2) Как именно определяется операция? > В частности, является ли операция однократным вызовом метода в моем тесте (creator.PiecewiseDNFModel)? Или операция определена более детально для различных частей самой PiecewiseDNFModel?
(3) Не вводит ли в заблуждение использование профилировщика GC для измерить объем памяти, занимаемый фрагментом кода, с учетом метода совокупного измерения? Например, если у меня есть операция, которая занимает много времени, но в данный момент использует только, скажем, 100 МБ, затем профилировщик GC сообщит о большом количестве для gc.alloc.rate.norm, но реальная нагрузка на этот процесс на моей машине очень мала. Казалось бы, более подходящим будет профилировщик, сообщающий о максимальном использовании памяти в любой момент времени. Если это так (я открыт для возражений), то может ли кто-нибудь предложить более подходящий метод профилирования?
Заранее благодарю за разъяснения, которые могут быть предоставлены по этим трем пунктам.< /п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-jmh-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»