多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在程序员不能控制定义要缓存的属性或者方法所在的类源码时候,"第一次使用时缓存"策略是一种比较合理的选择.例如在MyNewString示例中,我们不能向java.lang.String类注入一个自定义的initIDs函数到类的静态初始化代码中用于计算和缓存java.lang.String的构造函数的函数ID. "第一次使用时缓存"与"类静态初始化时缓存"策略相比,有如下缺点: 正如之前介绍的那样,"第一次使用时缓存"策略需要在每一次使用时对ID进行判断检,且在多线程使用状况下可能会产生重复初始化. 使用"第一次使用时缓存"策略,方法和属性ID仅仅在类没有被卸载的时候是有效的.你必须保证在你的代码还依赖你所缓存的这些ID的过程中,你所使用的类没有被卸载或者重新加载.(下一节我们会介绍如何通过创建一个类引用方式组一个类被卸载).另一方面,如果使用"类静态初始化时缓存"策略,被缓存ID在类被卸载并重新加载时候会被自动重新计算. 因此,我们应当尽量在类的静态初始化代码段中计算并缓存属性或者方法ID.