mirror of
https://github.com/alibaba/fastjson.git
synced 2026-10-24 10:20:34 +08:00
添加cache,解决并发问题,提高性能。
This commit is contained in:
@@ -41,6 +41,8 @@ public class ASMDeserializerFactory implements Opcodes {
|
||||
|
||||
private final ASMClassLoader classLoader;
|
||||
|
||||
private final Map<String, Class> classMap = new HashMap<String, Class>();
|
||||
|
||||
private final AtomicLong seed = new AtomicLong();
|
||||
|
||||
public String getGenClassName(Class<?> clazz) {
|
||||
@@ -104,7 +106,7 @@ public class ASMDeserializerFactory implements Opcodes {
|
||||
}
|
||||
}
|
||||
|
||||
Class<?> exampleClass = classLoader.defineClassPublic(className, code, 0, code.length);
|
||||
Class<?> exampleClass = defineClassPublic(className, code, 0, code.length);
|
||||
|
||||
Constructor<?> constructor = exampleClass.getConstructor(ParserConfig.class, Class.class);
|
||||
Object instance = constructor.newInstance(config, clazz);
|
||||
@@ -112,6 +114,14 @@ public class ASMDeserializerFactory implements Opcodes {
|
||||
return (ObjectDeserializer) instance;
|
||||
}
|
||||
|
||||
private Class<?> defineClassPublic(String name, byte[] b, int off, int len){
|
||||
if(classMap.containsKey(name)){
|
||||
return classMap.get(name);
|
||||
} else {
|
||||
return classLoader.defineClassPublic(name, b, off, len);
|
||||
}
|
||||
}
|
||||
|
||||
void _setFlag(MethodVisitor mw, Context context, int i) {
|
||||
String varName = "_asm_flag_" + (i / 32);
|
||||
|
||||
@@ -1212,7 +1222,7 @@ public class ASMDeserializerFactory implements Opcodes {
|
||||
|
||||
byte[] code = cw.toByteArray();
|
||||
|
||||
Class<?> exampleClass = classLoader.defineClassPublic(className, code, 0, code.length);
|
||||
Class<?> exampleClass = defineClassPublic(className, code, 0, code.length);
|
||||
|
||||
Constructor<?> constructor = exampleClass.getConstructor(ParserConfig.class, Class.class, FieldInfo.class);
|
||||
Object instance = constructor.newInstance(mapping, clazz, fieldInfo);
|
||||
|
||||
Reference in New Issue
Block a user