meowool-catnip / cloak

🙃 Kill the damn Java reflection
Apache License 2.0
1 stars 0 forks source link

Split member cache #6

Open chachako opened 2 years ago

chachako commented 2 years ago

目前在 JHM 结果 https://github.com/meowool-catnip/cloak/runs/5175083247?check_suite_focus=true#step:4:537 中表明 constructor 的缓存要比直接获取要慢,因此可能是不必要的空运算导致的 https://github.com/meowool-catnip/cloak/blob/73a1c60ff276229b933269229b2b48aa63f719cf/api/src/jvmMain/kotlin/com/meowool/cloak/internal/ReflectionFactory.kt#L182-L205

考虑将缓存键对象拆分为不同的类 [FieldCacheKey, ConstructorCacheKey, MethodCacheKey]

chachako commented 2 years ago

也需要考虑将 map 分为多个,以避免潜在情况:当反射了非常多不同种类的成员时,map会变得非常大,这可能会影响搜索速度,因此将每个种类的成员分开来也许会更好。 https://github.com/meowool-catnip/cloak/blob/0b26ee46d61a731b882d6617a05a2f3be3c3ad61/api/src/main/kotlin/com/meowool/cloak/internal/ReflectionFactory.kt#L43-L45 这个问题解决前需要考虑一个性能阈值,暂时不清楚是否真的需要这么做,1k 的缓存量感觉到头了,hashmap 1k 数据应该不会多慢