【发布时间】:2009-06-27 15:57:23
【问题描述】:
多态内联缓存(PIC)通过按对象类型缓存实际方法来工作,以避免昂贵的查找过程(通常是哈希表查找)。
如果类型对象是可变的(即方法可能在运行时被猴子修补成不同的东西),如何处理类型比较?
我想出的一个想法是一个“类计数器”,每次调整方法时都会递增,但是这似乎在一个大量猴子修补的环境中会异常昂贵,因为它会杀死所有该类的 PIC,即使它们的方法没有改变。
我确信必须有一个好的解决方案,因为这个问题直接适用于 JavaScript,并且 AFAIK 所有三个大型 JavaScript 虚拟机都有 PIC。
【问题讨论】:
-
这听起来像是灾难的秘诀。
标签: javascript vm-implementation dynamic-typing cache-invalidation polymorphic-functions