gpt4 book ai didi

java - 多个实例与缓存实例

转载 作者:行者123 更新时间:2023-12-01 05:11:49 25 4
gpt4 key购买 nike

考虑一个只有一个方法的接口(interface):

Object getValue(String data);

假设这描述了从String到任何其他数据类型的数据转换(假设转换有效)。对于来自文本上下文的数据,可能有多个具有相同数据类型的列,因此会存在同一数据转换器的多个实例。

很久以前,我编写了代码来缓存这些实例,而不是拥有同一对象的多个实例:

private HashMap<Class<? extends T>, T> map;

public synchronized T getInstance(Class<? extends T> type) throws IllegalArgumentException
{
T instance = map.get(type);
if (instance == null)
{
try
{
instance = type.newInstance();
}
catch (Exception ex)
{
throw new IllegalArgumentException("The provided class cannot be instantiated: "
+ type.getName() + "\n" + ex);
}
map.put(type, instance);
}
return instance;
}

由于这些类没有状态,因此在单个共享实例就可以做到的情况下拥有同一类的许多实例似乎是一种浪费。

但是,维护映射可能比拥有同一对象的多个实例(即使可以共享单个实例)的开销更大。我的意思是,即使有多个实例,方法代码也只会放入内存一次,对吗?所以在我看来,JVM 有效地为我保留了缓存。

对此事有什么想法吗?单例实例缓存方法可以更好吗?

感谢您阅读我的帖子。

最佳答案

每次使用new时,都会创建一个在堆中分配的新对象实例。当然,可执行代码属于类,它只是共享实例。

无论如何,从您的文本来看,您的对象没有状态,您只是在不使用其他数据的情况下转换 String 参数。鉴于此,我会选择静态方法。

关于java - 多个实例与缓存实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923425/

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