Влияют ли интерфейсы на производительность из-за уменьшения зависимостей в компиляторе Java или Eclipse?

#java #eclipse #performance #architecture #interface

#java #затмение #Производительность #архитектура #интерфейс #eclipse

Вопрос:

Предположим два разных сценария:

  • а) Каждый (сервисный) класс X имеет интерфейс X и ровно одну реализацию XImpl . Любой другой (сервисный) класс (например YImpl ) всегда взаимодействует с другими (сервисными) классами через интерфейс ( X ), но никогда напрямую не ссылается на класс реализации ( XImpl ) — это, по крайней мере, очень распространенный шаблон.
  • б) Точно так же, как а) но без всех интерфейсов. Есть только XImpl и YImpl это относится непосредственно к YImpl .

(Я предполагаю, что знаю много целей a) и b) , поэтому, пожалуйста, не обсуждайте это здесь.)

Мой вопрос: оказывает ли вариант b) отрицательное влияние на производительность при работе с Eclipse, Maven и M2E 1.0?

Я могу себе это представить, потому что у вас есть способ a) , и вы что-то редактируете в XImpl , это не влияет YImpl , потому что они полностью разделены интерфейсом X . Но при удалении интерфейсов в b) , чтобы они больше не были разъединены.

Комментарии:

1. Могут возникнуть дополнительные накладные расходы из-за вызовов invokeInterface vs invokeSpecial (как опубликовал JB Nizet, это порядка нескольких микросекунд), но я считаю, что HotSpot может оптимизировать сценарий 1 на 1 (если бы у меня были ссылки на cite, я бы опубликовал это как ответ вместо комментария). Использование или неиспользование интерфейсов должно диктоваться соображениями архитектуры и ремонтопригодности. Ими легко злоупотреблять, но у них есть свое место.

2. @Barend Garvelink: показатели производительности во время выполнения ясны, суть вопроса не в этом. И да, это касается архитектуры, потому что, по крайней мере, для интерфейсов не осталось других требований, поэтому я меньше всего боюсь, что редактор вызовет проблемы.

3. О, я недостаточно хорошо прочитал вопрос, извините.

4. @meriton: это более общий вопрос об архитектуре. Но в конкретном случае это примерно от 50 до 100 этих сервисов. Но полная база кода составляет от 500 до 1000 классов в полном проекте eclipse плюс от 150 до 200 внешних jar. Эти 50-100 сервисов работают немного как центральные классы, поэтому они ссылаются на множество других классов.

Ответ №1:

Вы не хотите жертвовать дизайном своего приложения, чтобы получать 2 микросекунды каждый раз, когда Eclipse или Maven компилируют ваши классы. Кстати, если вы редактируете XImpl, он должен проверить, что он по-прежнему соблюдает контракт интерфейса X, который используется YImpl, поэтому, вероятно, это не имеет никакого значения.

Комментарии:

1. «если вы редактируете XImpl, он должен проверить, что он по-прежнему соблюдает контракт интерфейса X, который используется YImpl». Да, но тогда это может прекратиться. Если интерфейса нет, я не знаю, где Eclipse останавливает процесс проверки или, по крайней мере, имеет ли это заметное значение.