栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用新的java.time API时区的解析非常慢

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用新的java.time API时区的解析非常慢

如您的问题和我的评论中所述,每次需要解析时区时,

ZoneRulesProvider.getAvailableZoneIds()
都会创建一组新的所有可用时区的字符串表示形式(的键
staticfinal ConcurrentMap<String, ZoneRulesProvider> ZONES
)。1个

幸运的是,a

ZoneRulesProvider
是一个
abstract
旨在被子类化的类。该方法
protected abstractSet<String> provideZoneIds()
负责填充
ZONES
。因此,如果子类提前知道要使用的 所有
时区,则只能提供所需的时区。由于该类提供的条目要少于包含数百个条目的默认提供程序,因此它有可能显着减少的调用时间
getAvailableZoneIds()

该ZoneRulesProvider
API提供了如何注册一个指令。请注意,不能取消注册提供程序,只能对其进行补充,因此,删除默认提供程序并添加您自己的提供程序不是一件简单的事情。系统属性

java.time.zone.DefaultZoneRulesProvider
定义默认提供程序。如果返回
null
(通过
System.getProperty("..."
),则将加载JVM的臭名昭著的提供程序。使用
System.setProperty("...","fully-qualified name of a concrete ZoneRulesProviderclass")
一个可以提供自己的提供程序,这就是第二段中讨论的提供程序。

最后,我建议:

  1. 子类化
    abstract class ZoneRulesProvider
  2. 实现了
    protected abstract Set<String> provideZoneIds()
    只用所需的时区。
  3. 将系统属性设置为此类。

我自己没有这样做,但是我 确信它会因为某种原因而失败,因为 它会起作用。


1在问题注释中建议,在1.8版本之间,调用的确切性质可能已更改。

编辑: 找到更多信息

上述默认

ZoneRulesProvider
final classTzdbZoneRulesProvider
位于中
java.time.zone
。从路径中读取该类中的区域:(
JAVA_HOME/lib/tzdb.dat
在我的情况下,它在JDK的JRE中)。该文件确实包含许多区域,下面是一个片段:

 TZDB  2014cJ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau Africa/Blantyre Africa/Brazzaville Africa/Bujumbura Africa/Cairo Africa/Casablanca Africa/Ceuta Africa/Conakry Africa/Dakar Africa/Dar_es_Salaam Africa/Djibouti Africa/Douala Africa/El_Aaiun Africa/Freetown Africa/Gaborone Africa/Harare Africa/Johannesburg Africa/Juba Africa/Kampala Africa/Khartoum Africa/Kigali Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Lome Africa/Luanda Africa/Lubumbashi Africa/Lusaka Africa/Malabo Africa/Maputo Africa/Maseru Africa/Mbabane Africa/Mogadishu Africa/Monrovia Africa/Nairobi Africa/Ndjamena Africa/Niamey Africa/Nouakchott Africa/Ouagadougou Africa/Porto-Novo Africa/Sao_Tome Africa/Timbuktu Africa/Tripoli Africa/Tunis Africa/Windhoek America/Adak America/Anchorage America/Anguilla America/Antigua America/Araguaina America/Argentina/Buenos_Aires America/Argentina/Catamarca  America/Argentina/ComodRivadavia America/Argentina/Cordoba America/Argentina/Jujuy America/Argentina/La_Rioja America/Argentina/Mendoza America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Aruba America/Asuncion America/Atikokan America/Atka America/Bahia

然后,如果找到了一种仅用所需区域创建类似文件并加载该区域的方法,那么性能问题 可能 肯定无法解决。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414462.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号