Java Синглтон против статического - есть реальная польза производительности?

голоса
15

Я сливаясь ветвь CVS и один из самых больших изменений является замена везде, где это происходит из шаблона Singleton с абстрактными классами, которые имеют статический блок инициализации и все статические методы.

Является ли это то, что стоит иметь, поскольку это потребует объединения много конфликтов, какая ситуация бы я смотрел на это для рефакторинга, чтобы быть полезным?

Мы бежим это приложение под Weblogic 8.1 (так JDK 1.4.2)


извините Томас, позвольте мне уточнить ..

версия ГОЛОВЫ имеет традиционную картину одноплодной (частный конструктор, деЫпзЬапс () и т.д.)

версия филиала не имеет конструктора, является «общественным абстрактным классом» и модифицированы все методы объекта, чтобы быть «статическими». Код, который используется существовать в частном конструктору перемещается в статический блок.

Тогда все обычаи класса меняются, который вызывает множество конфликтов слияния.

Есть несколько случаев, когда было сделано это изменение.

Задан 26/08/2008 в 15:45
источник пользователем
На других языках...                            


7 ответов

голоса
16

Я хотел бы использовать синглтон, если нужно хранить любое состояние, и статические классы в противном случае. Там нет смысла в инстанцировании что-то, хотя бы один экземпляр, если это не нужно хранить что-то.

Ответил 26/08/2008 в 15:59
источник пользователем

голоса
15

От строгой точки производительности выполнения зрения, разница действительно незначительна. Основное различие между этими двумя залегает в том, что «статический» жизненный цикл связан с загрузчиком классов, в то время как для одноэлементных это обычный жизненный цикл экземпляра. Обычно это лучше держаться подальше от ClassLoader бизнеса, вам избежать некоторых каверзных проблем, особенно при попытке перезагрузить веб-приложение.

Ответил 26/08/2008 в 15:52
источник пользователем

голоса
11

Статическое плох для расширяемости, так как статические методы и поля не могут быть расширены или переопределены подклассами.

Это также плохо для модульных тестов. В модульном тесте вы не можете держать побочные эффекты различных тестов от выплескивания, так как вы не можете контролировать загрузчик классов. Статические поля инициализируются в одном тестовом модуле будут видны в другом, или еще хуже, выполнении тестов одновременно будут привести к непредсказуемым результатам.

Синглтон обычно является нормально, когда шаблон используется экономно. Я предпочитаю использовать структуру DI и пусть это управлять своими экземплярами для меня (возможно, в различных областях, как в Guice).

Ответил 26/08/2008 в 18:52
источник пользователем

голоса
3

Из моего опыта, единственное, что имеет значение, какая из них легче высмеивать в модульных тестах. Я всегда чувствовал, Синглтон легче и естественно издеваться вне. Если ваша организация позволяет использовать JMockit, это не имеет значения, так как вы можете преодолеть эти проблемы.

Ответил 26/08/2008 в 16:14
источник пользователем

голоса
3

Если мое первоначальное сообщение было правильное понимание и обсуждение от Солнца, что было связанно с точным (который я думаю, что это может быть), то я думаю, что вы должны сделать компромисс между ясностью и производительностью.

Задайте себе следующие вопросы:

  1. Делает ли объект Singleton то, что я делаю более ясно?
  2. Мне нужен объект, чтобы выполнить эту задачу, или это больше подходит для статических методов ли?
  3. Нужно ли производительность, что я могу получить, не используя Singleton?
Ответил 26/08/2008 в 15:54
источник пользователем

голоса
0

Написать код для измерения производительности. Ответ будет зависеть от виртуальной машины Java (JDK от Sun может работать иначе, чем JRockit) и флагов VM ваше приложение использует.

Ответил 09/09/2008 в 02:44
источник пользователем

голоса
0

Помогает ли это обсуждение? (Я не знаю, если это табу для подключения к другому программированию на форуме, но я предпочел бы не просто цитировать весь разговор =))

Вс Обсуждение на эту тему

Приговор, кажется, что он не делает достаточно разницы материи в большинстве случаев, хотя технически статические методы являются более эффективными.

Ответил 26/08/2008 в 15:50
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more