Как бы вы объявили переменную-член OneToMany? - PullRequest
1 голос
/ 01 сентября 2010

Какую из следующих деклараций будет правильно выбрать для выделения нужного количества памяти. Вариант 1 имеет начальную емкость сбора 0, а вариант 2 - 10, а вариант 3 ничего не объявляет.

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

Option 1
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Email> emails = new HashSet<Email>(0);

или

Option 2
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Email> emails = new HashSet<Email>();

или

Option 3
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Email> emails;

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

Это микрооптимизация.

Технически, с точки зрения выделения памяти, они упорядочены:

Option 3 лучше чем Option 1 немного лучше чем Option 2

Но все же, Option 2 может быть вашим лучшим выбором

  • Set не нужно будет расширять при добавлении элементов
  • Ваш код будет легче обрабатывать, так как вам не придется проверять null
0 голосов
/ 01 сентября 2010

Если это так, имеет ли смысл просто объявить это, как в варианте 3, чтобы я мог избежать ненужного выделения памяти.

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

public void addToEmails(Email email) {
    emails.add(email);
    email.setUser(this);
}

Я предпочитаю вариант № 2, потому что мне не нужно выполнять проверку на ноль.

И, честно говоря, я даже не думаю о "стоимости" создания пустой коллекции.Скорее всего, это не то, что убьет производительность моего приложения.

Если ваше приложение замедляется (знаете ли вы, почему это так? Действительно ли это проблема с памятью или ГХ? Что вы диагностировали или измеряли?), Я почти уверен, что есть более критические оптимизациичем этот, чтобы сделать.На самом деле, я ставлю свою рубашку на это.

И не забывайте:

Если вы не можете измерить это, вы не можете улучшить его.- Лорд Кельвин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...