gpt4 book ai didi

java - 存储一组静态字符串值的最佳方法

转载 作者:行者123 更新时间:2023-11-30 02:07:34 25 4
gpt4 key购买 nike

我需要从 odata uri 中检索查询参数,例如 clIdclCtxclName,并在整个程序中使用它们许多类(class)。在我们定制的客户端框架中,每次检索查询参数都是一个昂贵的过程。每个请求检索和存储一次参数并在整个程序中使用相同参数的最佳方法是什么?

我的想法是创建一个带有静态 java 映射的单例类,如下所示。我第一次可以检索它们并将其存储在 map 中以便稍后使用。

还想知道我的方法是否存在内存泄漏或缺点等问题。

public class ClientContainer {

private static Map<String,String> clientMap;
private static ClientContainer instance;

private ClientContainer(){}

public static ClientContainer getInstance(){
if(instance == null){
instance = new ClientContainer();
}
return instance;
}

private void updateClientMap(HashMap<String,String> clientMap){
if(this.clientMap==null){
this.clientMap =clientMap;
}
}

private HashMap<String,String> getClientMap(){
return this.clientMap;
}
}

最佳答案

Also Would like to know Is my approach has any issues like memory leak or drawbacks.

1) 您的ClientContainer类仅存储一个客户端的参数。
您使用 Map<String,String> (参数值)在而不是 Map<Client, Map<String, String>> 中(参数值和客户端的所有值)。
由于您可以使用单例模式实例化该类一次,因此您只能存储不超过一个客户端请求的数据。

2)这样请求(param-value)的生命周期将是无限的。
Map实际上永远不会被垃圾收集,因为它被单例实例引用,而该单例实例也永远没有机会被垃圾收集。

因此,如果您保留单例模式,您至少应该考虑 key-values根据客户端的说法,您还应该考虑在每次完全处理请求时清理缓存以避免内存泄漏。

但是如果我是你,我可能会使用另一种解决方案:

  • 我要么一次性将 Map 创建为局部变量:在收到请求时,然后将其显式传递给需要该请求的每个方法。

  • 或者我会使用 ThreadLocal如果每个请求都由特定线程处理,则存储 Map。

请注意,我更喜欢第一种方式,可以清楚地公开方法的依赖关系。
另请注意,使用 Map如果要使用的字段数量稳定且已知,则不一定是最好的事情:使用自定义类可能会更清晰、可读且更健壮。

关于java - 存储一组静态字符串值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com