Я профилирую программу, используя профилирование выборки в YourKit и JProfiler, а также «вручную» (я запускаю ее и нажимаю Ctrl-Break несколько раз, чтобы получить дампы потоков).
Все три метода дают мне очень странные результаты: несколько десятков процентов времени, проведенного в трехстрочном методе , который даже не выполняет никакого выделения или синхронизации и не имеет циклов и т. Д. Кроме того, после того, как я превратил этот метод в NOP и даже полностью удалил его вызов, наблюдаемая производительность программы не изменилась вообще (хотя она получила незначительную утечку памяти, поскольку это был метод для освобождения дешевого ресурса).
Я думаю, что это может быть из-за ограничений, которые JVM накладывает на моменты, когда может быть получена трассировка стека потока, и почему-то получается, что в моей программе это именно те моменты, когда этот метод вызывается, хотя в этом нет абсолютно ничего особенного или контекст, в котором он вызывается.
Чем можно объяснить это явление?
Каковы вышеупомянутые ограничения?
Какие дополнительные измерения я могу предпринять, чтобы прояснить ситуацию?