类名.class_更快地重复访问Java的Java类名?

类名.class

类名.class

Claes Redestad已在core-libs-dev邮件列表中发布了消息“ RRF:8187123 :(反映)Class#getCanonicalName和Class#getSimpleName是性能问题的一部分”,他在邮件列表中要求审查建议的更改“以启用缓存”的另一方面,getCanonicalNamegetSimpleName ,重复这已报告是一个性能瓶颈的电话。” 他补充说:“缓存将这些方法的性能提高了20倍。”

解决性能问题的一个明显解决方案可能是将类的名称作为字段添加到Class类定义中,但是Redestad在关联的错误JDK-8187123中指出:“我们应避免向java.lang中添加更多字段。班级。” 取而代之的是,该错误的解决方法是“ 背负在ReflectionData中缓存的其他反射信息”。

ReflectionData是在Class类中定义的一个嵌套( private static )类。 Class类对ReflectionData的引用定义为:

private volatile transient SoftReference<ReflectionData<T>> reflectionData;

Class实例包含对嵌套类ReflectionData的实例的软引用( java.lang.ref.SoftReference )。 用于SoftReference的类级Javadoc指出,“软引用是由垃圾收集器根据内存需求而酌情决定的”,并且软引用“最常用于实现对内存敏感的缓存”。 这似乎是平衡性能和内存问题的不错的解决方案。

邮件列表消息引用了对Class.java的建议更改链接。 回顾这些更改,您可以快速看到建议的代码更改如何将三个新的String添加到ReflectionData实例中包含的属性中,以表示规范名称,简单名称和类型名称。 当然,三种方法提供向这些细节[另一方面,getCanonicalName() , getSimpleName() ,getTypeName() ]被改变为使用这些值。

在撰写本文时, JDK-8187123尚未与特定的Java版本关联。

翻译自: https://www.javacodegeeks.com/2018/05/faster-repeated-access-to-java-class-names-coming-to-java.html

类名.class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值