0

我想知道是否有人可以提供任何建议。我为几个 POJO 编写了一个 Json 反序列化器/序列化器。为了使它们尽可能通用,它们依靠反射来反对 POJO getter/setter 方法等。由于这是对性能的最大影响,我尝试创建一种“ClassUtils”缓存,在检索后存储 Method 对象(我使用 Introspector 获取属性描述符列表,然后获取 get/set从那里的方法)

然而,我尝试首先使用 Guava LoadingCache - 虽然它有一些非常好的和有用的功能,但与我创建的自定义缓存相比,它非常慢 - 使用 Guava 缓存序列化 1,000 个对象需要 3.5 秒,而我的只有 <1 秒自己的...但是,我自己的缓存缺少很多 Guava 的有用功能(例如清除旧条目等)

有没有关于提高 Guava 性能或改进自定义缓存的建议?我不能像工作一样发布任何代码,但是我自己的自定义缓存基本上是存储 PropertyDescriptors 的 HashMap 的包装器,使用字符串作为键(我需要将键存储为完整的类名加上属性名称,例如“com.company.package.classes.myclass.property”)

4

1 回答 1

1

我不会使用 JSON。如果使用二进制格式,则序列化/反序列化的性能可能会提高 10 - 100 倍,具体取决于数据结构的复杂程度。如果您想要性能,您将避免使所有内容都完全通用。

只需几行代码,您就可以将 LinkedHashMap 用作 LRU 缓存。

将每个属性存储为单独的键比使用适当的对象慢一个数量级。(同样,这不太通用,但效率更高)

于 2013-09-02T19:24:55.430 回答