首页 > 解决方案 > 字节好友位置策略类型

问题描述

我看到默认LocationStrategySTRONG,它在创建ClassFileLocator. 这是否意味着 Byte Buddy 可以防止类加载器被垃圾收集(例如,当从 servlet 容器中取消部署 webapp 时)或者是否有另一种机制来疏散这些?

同样在这方面-有关该WEAK策略的文档说ClassFileLocator,在相应的类加载器被垃圾收集后,a 将“停止工作”。有什么影响?如何使用垃圾收集类加载器的定位器?

标签: byte-buddy

解决方案


你的断言是对的。使用强类型定位器,所有TypeDescriptions 都将引用类加载器,因为依赖类型被延迟解析。这意味着,例如,如果您查找一个类型的字段类型,那么只有在您第一次使用它时才会加载该类型,而这可能永远不会发生。

通常,这些类型描述不会在加载的类的整个生命周期内存储。由于类加载器在加载其类之一期间永远不会被垃圾收集,因此强烈引用类加载器不会呈现任何问题。然而,一旦你想在多个类加载之间缓存类型描述(这会很有意义,因为一些应用程序使用同一个类加载器加载了数千个类),如果类加载器会被垃圾收集,这可能会成为一个问题。缓存仍在使用底层类加载器引用类型描述。

在这种情况下,重用类型描述将是有问题的,因为在类加载器被垃圾回收后,无法解析延迟引用的类。请注意,类型描述可能会使用特定的类加载器来解析,而该类是由该类加载器的父级定义的,这就是为什么这可能是一个问题。

通常,如果您为每个类加载器维护类型描述的缓存,那么这应该不是问题。


推荐阅读