Для чего используются эти странные логические выражения в JMH? - PullRequest
0 голосов
/ 21 января 2020

Я написал тест JMH о стоимости new инструкции и проверил файлы классов, которые она генерирует. Кроме обычных классов, в папке generated есть тонны производных классов:

class files

Это действительно шокировало меня, так как всего несколько аннотаций приведут так много классов, связанных вместе через наследование. Мне любопытно, что происходит в этом классе, поэтому я использую инструмент декомпиляции (кстати, я узнал об этом инструменте из одного выступления на KotlinConf 2019) под названием procyon, чтобы декомпилировать этот сгенерированный класс, большинство из них связаны с управлением, например, временем измерения (они явно указаны, не могут быть встроены) и собирать метрики. Но в этом классе есть тонны странных логических значений:

a class file consisted of only booleans

также есть много логических значений в других файлах сгенерированных классов. Я гуглил это, и кажется, что они в некоторой степени получены из кода источника JMH . Итак, я хочу спросить, для чего используются эти логические значения? Я предполагаю, что они тесно связаны с рабочим принципом, лежащим в основе JMH ... кажется, нет комментариев о логических значениях в исходном коде JMH.

Кроме того, любые предложения по улучшению теста JMH я упоминал с самого начала. ..? Я знаю, что тестирование таких вещей может быть очень сложным и уязвимым, поэтому я не знаю, являются ли они точными или достаточно надежными.

Большое спасибо.

1 Ответ

3 голосов
/ 21 января 2020

Просто угадать.

Как видите, логические значения являются частными и не используются в исходном файле. Они могут быть использованы где-то с помощью рефлексии, но я бы поспорил, что это не так. Поэтому остается только убедиться, что markerBegin и другое поле принадлежат другому кешу, чтобы предотвратить ложное совместное использование .

...