【问题标题】:Manage memory while creating and returning collection在创建和返回集合时管理内存
【发布时间】:2021-09-13 03:42:02
【问题描述】:

我想知道在内存管理方面更好的编码方式,


    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;
      }      
}

每 3000 万次刷新一次缓存,我们将在下拉列表中显示 15000 名员工

【问题讨论】:

  • 技术上最适合内存的方法,以及可维护性和可用性的唯一合理方法。

标签: java memory-management


【解决方案1】:

与所有情况一样,答案是“取决于...”

如果只有一个 Cache 对象并且只有一个线程在调用 findEmployees 方法,那么第二种选择更好。员工名单将在此处重复使用。

如果多个线程正在调用 findEmployees 方法,那么您只能使用第一个选项。使用多个线程时,员工将在线程之间共享并导致数据竞争条件。

您需要先测试性能,然后再决定哪种选项最适合内存管理。

【讨论】:

  • 在 CacheManager 类中,我们将其注入 -@EJB 私有缓存缓存;我们在 -@Timeout public void onTimeout(Timer timer) { .findEmplyees(); }
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2014-10-10
  • 1970-01-01
相关资源
最近更新 更多