Мои два следующих пункта не совсем соответствуют названию вашего вопроса, но я думаю, что они могут быть полезны ...
Я подтверждаю ваш показатель эффективности.
Я читал о решении в книге по производительности Java. Мы применили это к нашему собственному приложению, за некоторыми исключениями (где трассировка стека не важна и возможная частота высока). Я не знаю, понравится ли вам это;; -)
Создайте уникальный экземпляр вашего класса Exception, сохраните его. Брось этот экземпляр .
Это кажется идеальным, когда вы не хотите нарушать существующий поток, основанный на исключениях.
Если ваш компилятор жалуется на то, что другой метод не генерирует это исключение, то это потому, что вы выбрали проверенное исключение.
Используйте подкласс RuntimeException (они не проверены, поэтому компилятор не знает, брошены они или нет, не будет жаловаться).