#java #memory-management
Вопрос:
Я хочу знать лучший способ кодирования с точки зрения управления памятью,
public class Cache {
......
......
public List<EmployeeBDO> findEmployees(){
......
List<EmployeeBDO> employees = new ArrayList<>();
for (... : ...) {
employees.add(...);
}
......
return employees;
}
}
или
List<EmployeeBDO> employees = new ArrayList<>();
public class Cache {
......
......
public List<EmployeeBDO> findEmployees(){
......
employees.clear();
for (... : ...) {
employees.add(...);
}
......
return employees;
}
}
Кэш обновления обновляется каждые 30 млн, и в нем работают 15 000 сотрудников, которые мы отобразим в раскрывающемся списке
Комментарии:
1. Есть то, что технически лучше всего подходит для памяти, и есть то, что является единственным разумным подходом для удобства обслуживания и удобства использования.
Ответ №1:
Как и во всех случаях, ответ таков: «Это зависит …»
Если существует один объект кэша и только один поток вызывает метод findEmployees, то второй вариант лучше. список сотрудников будет повторно использован здесь.
Если несколько потоков вызывают метод findEmployees, вам нужно выбрать только первый вариант. При использовании нескольких потоков сотрудники будут распределены между потоками и приведут к состоянию гонки данных.
И вам нужно проверить производительность, прежде чем решать, какой вариант лучше всего подходит в термах управления памятью.
Комментарии:
1. В классе CacheManager мы вводим его с помощью кэша -@EJB private Cache; И мы используем вызов метода в -@Timeout public void onTimeout(Таймер таймера) { .findEmplyees(); }