ThreadLocal变量的性能

ThreadLocal变量读取的速度比从常规字段读取的速度慢多少?

更具体地说,简单对象创建比访问ThreadLocal变量快还是慢?

我认为它足够快,因此ThreadLocal<MessageDigest>MessageDigest每次创建实例相比,拥有实例要快得多。但这是否也适用于字节[10]或字节[1000]?

编辑:问题是调用ThreadLocalget 时真正发生了什么?如果那只是一个领域,就像其他领域一样,那么答案将是“它总是最快的”,对吗?

回答:

运行未发布的基准测试,ThreadLocal.get我的计算机上每次迭代大约需要35个周期。没什么。在Sun的实现中,ThreadThreadLocals

映射为值的自定义线性探测哈希图。由于只能通过单个线程访问它,因此它可能非常快。

小对象的分配需要类似的周期数,尽管由于缓存耗尽,您可能会在紧密循环中得到较低的数字。

的建造MessageDigest可能相对昂贵。它具有相当数量的状态,并且通过ProviderSPI机制进行构造。您可以通过克隆或提供来进行优化Provider

仅仅因为缓存ThreadLocal而不是创建可能更快,并不一定意味着系统性能会提高。您将有与GC相关的额外开销,这会降低一切。

除非您的应用程序使用率很高,否则您MessageDigest可能需要考虑使用常规的线程安全缓存。

以上是 ThreadLocal变量的性能 的全部内容, 来源链接: utcz.com/qa/405440.html

回到顶部