JodaTime年表缓存
|
我已经根据JodaTime成功编写了一个新的年表,以代表我公司的财务日历。我参考了JodaTime源代码,以弄清楚我需要做什么。我在
BasicChronology
类中注意到的一件事是使用内部类YearInfo
来缓存\'firstDayOfYearMillis \'-自1970-01-01(ISO)以来的毫秒数。弄清楚,如果JodaTime缓存了足够的性能瓶颈,我可能也应该将其添加到我的年表中。
但是,当我这样做时,我做了一些修改。具体来说,我将getYearInfo
方法移到了YearInfo
内部类中,并使其变为静态。我还将用于存储缓存值的数组也移到了内部类中。修改后的类的完整定义如下:
/**
* Caching class for first-day-of-year millis.
*
*/
private static final class YearInfo {
/**
* Cache setup for first-day-of-year milliseconds.
*/
private static final int CACHE_SIZE = 1 << 10;
private static final int CACHE_MASK = CACHE_SIZE - 1;
private static transient final YearInfo[] YEAR_INFO_CACHE = new YearInfo[CACHE_SIZE];
/**
* Storage variables for cache.
*/
private final int year;
private final long firstDayMillis;
private final boolean isLeapYear;
/**
* Create the stored year information.
*
* @param inYear The year to store info about.
*/
private YearInfo(final int inYear) {
this.firstDayMillis = calculateFirstDayOfYearMillis(inYear);
this.isLeapYear = calculateLeapYear(inYear);
this.year = inYear;
}
/**
* Get year information.
*
* @param year The given year.
*
* @return Year information.
*/
private static YearInfo getYearInfo(final int year) {
YearInfo info = YEAR_INFO_CACHE[year & CACHE_MASK];
if (info == null || info.year != year) {
info = new YearInfo(year);
YEAR_INFO_CACHE[year & CACHE_MASK] = info;
}
return info;
}
}
我的问题是...更改对性能或设计有何影响?我已经决定我的更改应该是线程安全的(给出有关最终成员变量的答案)。但是,为什么原始实现按原样完成,而不是这样?我知道为什么大多数静态有效使用的方法都不是(给定BasicChronology
的子类),但是我承认我的一些OO设计知识有些生锈(过去两年来一直使用RPG )。
那么...有什么想法吗?
没有找到相关结果
已邀请:
2 个回复
功飘
埃输林桨铃