Нет, это не будет сбор мусора, см. Javadoc :
Замечание по внедрению. Объекты значения в файле WeakHashMap хранятся обычными простыми ссылками. Таким образом, следует проявлять осторожность, чтобы объекты ценности не обращались напрямую к их собственным ключам прямо или косвенно, поскольку это предотвратит отбрасывание ключей.
blockquote>Как уже упоминалось @biziclop одним из решений было бы хранить слабую ссылку на ключ в вашем объекте value.
public class Value { final public WeakReference
key; public Value(Key k) { this.key = new WeakReference (k); } }
Я написал несколько заметок по этому поводу в книге «Эффективная реализация», но там нет никаких правил или канонических соглашений.
Подводя итог:
Прежде всего, самое важное - это то, что вы последовательны.
В общем соглашении Maven в качестве разделителя используется символ «-» ( commons-lang
, maven-model
).
Если вы собираетесь использовать его извне, запомните module = artifact ID = filename
(в лучшем случае), поэтому он должен быть узнаваемым ( maven-model-2.0.jar
ясен, model-2.0.jar
нет). В этом случае вы обычно повторяете последний элемент идентификатора группы как мини-пространство имен. «Внутренние» модули могут опускать его для краткости (как показано в примере приложения: http://github.com/brettporter/centrepoint/tree/master/centrepoint/modules/ ).
Кроме того, я бы сделал их как можно короче.
Вы можете провести параллель между соглашениями об именовании пакетов Java и классов с идентификаторами групп и артефактов Maven.
Обычно я стараюсь, чтобы имена модулей были краткими. Если имя «хочет» быть длинным, это признак того, что другой уровень вложенности, вероятно, является хорошей идеей. Поэтому вместо этого:
- root
- api
- impl
- security
- service-soap
- service-rest
- client-swing
- client-web-html
- client-web-mobile
Я бы вложил вещи дальше:
- root
- api
- impl
- security
- service
- soap
- rest
- client
- swing
- web
- html
- mobile
с помощью параметров реактора maven вы все равно можете создавать вложенные модули, изолированные сверху:
mvn -pl client/web clean install
Вы можете пойти еще дальше:
-- project
-- project-module-1
-- project-module-2
Без шуток, это действительно вопрос вкуса.
Доброго времени суток, Максим