不想用new,想用对象池,但是json的反序列化,都是返回对象的,没有传入已经创建好的对象的。怎么办。 有点不理解你的需求。JSON是做对象--字符串转换的,为啥你自己还要传一个teacher对象呢?这个对象的意义是什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 翻翻源代码/JavaDoc也许能找到点东西,比如说 json-lib 可以实现 NewBeanInstanceStrategy 来管理对象生成,但是跟楼主的要求有点出入。再不行自己扩展/修改类库,万能的 不明白,不是json 转为对象吗? json-lib的JSONObject.toBean(String jsonString,Object root,JsonConfig jsonConfig);这个就可以了 JSON解析自身的代价就很大,一般来说多一个new基本没什么影响。你要能做到重用JSON解析里面的那些new才有意义。试试fastCSharp fastCSharp.setup.cSharp.json.parse.From(ref value, json); 从占用cpu时间上来说,new可能无所谓。但是从gc上就有用了。比如4G新生代,并发量大的时候,如果全部都是new,整个内存的过程就是 0-4G ,gc 4G-0G, 弄不好,还有fullgc.JSONObject支持是吧,很好。gson,好像就不支持,没找到传入object的方法。 我是说JSON解析过程中的new很多(假设平均一次10个,一般都不止这个数),而外围只有这一个new。这种情况下,外围对象池仅仅减少了10%不到的new,而解析过程中的90%以上的new才是性能杀手。 测试了下json-lib这里不合适啊抱歉。json-lib先读取为JSONObject再toBean,会创建很多中间对象(JSONObject, JSONArray等),我测试的时候效率居然比Jackson差了十几倍晕(而且json-lib这个库很久不更新了)。Jackson里使用 ObjectMapper.readerForUpdating(T) 可传入对象,以后每次都解析到同一个对象,只是在它的ObjectReader里这个对象居然声明为final,搞不懂。再往里看看这个方法可以的 JsonDeserializer.deserialize(JsonParser jp, DeserializationContext ctxt,T intoValue),就是初始化有点麻烦,没测试。Gson,没找到,但是“想用对象池”这个需求可以通过实现InstanceCreator 谢谢楼上。现在手上维护的项目刚好就是用的Jackson 不能编译 求高手 提供一些给刚学的初学者一点经验! adapter模式的现实意义 JAVA 怎么操作鼠标键盘 J2SE中一个关于多线程的问题(存钱与取钱的同步)!! 有没有现成的第三方类包?把java对象转成xml串的!也可以把xml串转成对应的java对象的? 导师给的题目,大家有没有好的测试方案,或是相关的资源,欢迎指导 如何对鼠标点击选项判断操作 请问\jdk\lib\下的这个dt.jar文件有什么作用?要什么场合下用得到? 求一菜鸟算法,急 我的map问题,请教! JNA调用DLL--Struct里有个HWND不知道怎么转换
再不行自己扩展/修改类库,万能的
试试fastCSharp fastCSharp.setup.cSharp.json.parse.From(ref value, json);
这种情况下,外围对象池仅仅减少了10%不到的new,而解析过程中的90%以上的new才是性能杀手。
json-lib先读取为JSONObject再toBean,会创建很多中间对象(JSONObject, JSONArray等),我测试的时候效率居然比Jackson差了十几倍晕(而且json-lib这个库很久不更新了)。
Jackson里使用 ObjectMapper.readerForUpdating(T) 可传入对象,以后每次都解析到同一个对象,只是在它的ObjectReader里这个对象居然声明为final,搞不懂。再往里看看这个方法可以的 JsonDeserializer.deserialize(JsonParser jp, DeserializationContext ctxt,T intoValue),就是初始化有点麻烦,没测试。
Gson,没找到,但是“想用对象池”这个需求可以通过实现InstanceCreator