Скорость загрузки классов Java

170
07 марта 2019, 17:20

Использую в проекте Spring и Hibernate, разные ServiceDAO, осуществляющие доступ к данным, имеют уже порядка 30 методов, мне стало интересно, стоит ли их разбивать ради повышения производительности, или кол-во методов в классе не влияет на его скорость загрузки?

Answer 1

Не влияет.

На скорость влияет код в методах, а не количество их в классе, т.к. код выполняется многократно, а классы загружаются один раз. Скорость загрузки байт-кода так высока что какие бы то ни было различия будут неощутимы. Выигрыша, даже незначительного, не будет в любом случае т.к. вместо одного класса с 30-ю методами будет загружено три по 10 в каждом.

Более общая мысль: если решили всерьез заняться оптимизацией, то первым делом нужно измерить скорость выполнения кода, найти самые медленные места и сосредоточиться на них. Навряд ли самой медленной частью будет работа загрузчика классов.

Вызовы методов, загрузка классов, JIT-компиляция, как правило, работают быстро. Запрос к БД либо обращение к сервисам займут в тысячи раз больше времени. Запуск сборщика мусора и загрузка сущности из кэша работают в сотни раз медленнее. Экономить на наносекундах можно, но в этом мало смысла когда секунды тратятся впустую.

стоит ли их разбивать ради повышения производительности

Не стоит. Разбивать классы стоит для организация логики и повышения удобочитаемости.

P.S. «Преждевременная оптимизация — корень всех зол.» Дональд Кнут

Answer 2

"Разбивать классы" следует в соответствии с архитектурными принципами, а не руководствуясь скоростью их загрузки. Если у вас 30 методов в одно классе, то вы явно нарушаете принцип единственной ответственности, как минимум.

READ ALSO
Заблокированные Packages в Eclipse

Заблокированные Packages в Eclipse

Сталкиваюсь с такой проблемойВременами когда я гружу проекты с war файла в Eclipse, Packages не открываются в "Название проекта/Java Resources/src" С чем это...

153
Литералы - константы?

Литералы - константы?

В Java литералы применяются для представления постоянных значений в форме, удобной для восприятияНапример, число 100 является литералом

143
Сборка ресурсов проекта в jar Gradle

Сборка ресурсов проекта в jar Gradle

Собираю проект с помощью GradleПри этом из resources в jar входит только META-INF

151
Итерация внутри thymeleaf

Итерация внутри thymeleaf

Коллеги, добрый день

163