Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于辅助反射的高性能对象缓存_Java_Caching - Fatal编程技术网

Java 用于辅助反射的高性能对象缓存

Java 用于辅助反射的高性能对象缓存,java,caching,Java,Caching,我想知道是否有人能给我一些建议。我已经为几个POJO编写了一个Json反序列化器/序列化器。为了使它们尽可能通用,它们依赖反射来对象POJO getter/setter方法等等。由于这是对性能的最大影响,因此我尝试创建一种“ClassUtils”缓存,在检索到方法对象后存储该缓存(我使用内省器获取属性描述符列表,然后从中获取get/set方法) 然而,我尝试首先使用Guava LoadingCache-虽然它有一些非常好和有用的特性,但与我创建的自定义缓存相比,它非常慢-用Guava缓存序列化1

我想知道是否有人能给我一些建议。我已经为几个POJO编写了一个Json反序列化器/序列化器。为了使它们尽可能通用,它们依赖反射来对象POJO getter/setter方法等等。由于这是对性能的最大影响,因此我尝试创建一种“ClassUtils”缓存,在检索到方法对象后存储该缓存(我使用内省器获取属性描述符列表,然后从中获取get/set方法)


然而,我尝试首先使用Guava LoadingCache-虽然它有一些非常好和有用的特性,但与我创建的自定义缓存相比,它非常慢-用Guava缓存序列化1000个对象需要3.5秒,而且只有我不会使用JSon。如果使用二进制格式,序列化/反序列化的性能可能会提高10-100倍,具体取决于数据结构的复杂程度。如果你想要性能,你必须避免让所有东西都完全通用

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


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

我必须使用Json:(我一直在尝试将属性存储为对象,即将get/set/constructor方法存储在一个对象中,将属性名作为键,这似乎提高了速度。此外,由于存储方法的每个对象都是不可变的,缓存hashcode也提高了性能,而不是猜测可能出现的问题。)请注意,当您在探查器中运行代码时,您认为性能瓶颈是什么?我建议您同时启用内存和CPU评测。使用Jackson(可选)替换反射以生成字节码。不幸的是,没有代码就无法调试Guava。它仍然比Guava端口快,但许多功能仅限于在番石榴中加入了红豆。