Останется ли этот класс в памяти, пока
программа запущена или будет
мусор собирают при контроле
поток программы выйдет наружу
метод где
MyClass.getConnection () был вызван?
Объекты класса будут иметь право на сборку мусора, как и любой другой объект - когда не существует ссылок на объекты класса. Как правило, эти ссылки хранятся в ClassLoader, который загрузил класс в первую очередь. Таким образом, класс будет оставаться до тех пор, пока Classloader, который ссылается на него, используется. Он не будет выгружен после выполнения метода, если только вызывающая сторона не создала загрузчик классов и ссылка на загрузчик классов больше не существует.
В долго работающих приложениях (например, приложениях Java EE) класс и загрузчик классов (как правило, уникальный существует для каждого приложения) не будут иметь права на сборку мусора, пока само приложение не будет закрыто.
Синглтон-паттерн и его влияние на ГХ
Сборка мусора классов, реализующих шаблон синглтона, является уникальной ситуацией. На класс по-прежнему ссылается его экземпляр, поэтому он никогда не будет иметь право на сборку мусора. Это может привести к проблемам, при которых сами загрузчики классов могут не собираться мусором, особенно во время перезапуска приложения в контейнере, что приводит к утечке памяти. Решение этой проблемы состоит в том, чтобы уничтожить экземпляр синглтона в прослушивателе контекста, который прослушивает событие уничтожения контекста (приложения).
Обновление № 2
Для обновленного вопроса:
На самом деле я хочу знать, должен ли я получать объект Connection в каждом методе (получение объекта подключения - это довольно длительная операция, не так ли?), Где я его использую или только один раз в каком-то месте?
Получение соединения стоит дорого, но только если вы управляете соединением. Вот почему вы используете источник данных, поддерживаемый пулом соединений. Каждый раз, когда вам нужно соединение, источник данных будет получать его из пула. Как только вы закончите с соединением, вы должны закрыть его, чтобы оно могло быть возвращено в пул. Мой совет - не выполнять преждевременную оптимизацию; пулы соединений являются фактом в современных приложениях Java EE, и серверы приложений выполняют достаточную оптимизацию, чтобы обеспечить здесь очень малую задержку. ИМХО, правильно настроенный пул даст вам лучшую производительность, чем класс, созданный вручную для централизованного доступа к объектам соединения.