💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
当我们使用"第一次使用的时候缓存"的策略的时候,我们不得不在每一次使用ID之前先判断它是否已经被初始化.这种方式不仅会带来一点点的性能浪费,在多线程使用状况下还会引起重复计算和缓存. 在很多情况下,在应用程序调用一个Native函数之前提前计算它使用到的属性和方法ID是一种更方便且高效的方式.虚拟机会在执行调用一个类的任何方法之前调用这个类的静态初始化代码.所以一个比较合适的计算和缓存属性/方法ID的时是类的静态初始化代码. 例如,要缓存InstanceMethodCall.callback对应的方法ID,我们增加了一个新的native函数 initIDs,并在InstanceMethodCall类的静态初始化代码中调用. 与4.2节的示例代码相比,以上程序包含了额外的两行(使用粗体高亮).initIds实现了计算和缓存InstanceMethodCall.callback的方法ID. 虚拟机执行静态初始化代码,从而调用到initIDs函数,在执行InstanceMethodCall类的任何其他代码之前.而在调用逻辑上,由于方法ID已经被缓存在一个全变量中,InstanceMethodCall.nativeMethod 不再需要执行符号查找了.