不想用new,想用对象池,但是json的反序列化,都是返回对象的,没有传入已经创建好的对象的。怎么办。

tuoluofo 2014-03-30 11:01:33
各种方法好像都是 json2obj(String jsonString, Class class)

我不想用json工具包new出来的对象,想传入我自己的对象,比如

Teacher teaccher=tercherPool.get();
json2obj(String jsonString, Teacher teacher);

主要是可以避免内存抖动和各种gc对吞吐和响应的影响。

有支持这种方式的Json工具包吗。
...全文
1218 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
byourfan 2014-04-01
  • 打赏
  • 举报
回复
测试了下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
tuoluofo 2014-04-01
  • 打赏
  • 举报
回复
谢谢楼上。现在手上维护的项目刚好就是用的Jackson
showjim 2014-03-31
  • 打赏
  • 举报
回复
引用 6 楼 tuoluofo 的回复:
从占用cpu时间上来说,new可能无所谓。 但是从gc上就有用了。 比如4G新生代,并发量大的时候,如果全部都是new,整个内存的过程就是 0-4G ,gc 4G-0G, 弄不好,还有fullgc. JSONObject支持是吧,很好。 gson,好像就不支持,没找到传入object的方法。
我是说JSON解析过程中的new很多(假设平均一次10个,一般都不止这个数),而外围只有这一个new。 这种情况下,外围对象池仅仅减少了10%不到的new,而解析过程中的90%以上的new才是性能杀手。
suciver 2014-03-31
  • 打赏
  • 举报
回复
json-lib的JSONObject.toBean(String jsonString,Object root,JsonConfig jsonConfig);这个就可以了
tony4geek 2014-03-31
  • 打赏
  • 举报
回复
不明白,不是json 转为对象吗?
byourfan 2014-03-31
  • 打赏
  • 举报
回复
翻翻源代码/JavaDoc也许能找到点东西,比如说 json-lib 可以实现 NewBeanInstanceStrategy 来管理对象生成,但是跟楼主的要求有点出入。 再不行自己扩展/修改类库,万能的
oh_Maxy 2014-03-31
  • 打赏
  • 举报
回复
有点不理解你的需求。 JSON是做对象--字符串转换的,为啥你自己还要传一个teacher对象呢?这个对象的意义是什么?
tuoluofo 2014-03-31
  • 打赏
  • 举报
回复
从占用cpu时间上来说,new可能无所谓。 但是从gc上就有用了。 比如4G新生代,并发量大的时候,如果全部都是new,整个内存的过程就是 0-4G ,gc 4G-0G, 弄不好,还有fullgc. JSONObject支持是吧,很好。 gson,好像就不支持,没找到传入object的方法。
showjim 2014-03-31
  • 打赏
  • 举报
回复
JSON解析自身的代价就很大,一般来说多一个new基本没什么影响。你要能做到重用JSON解析里面的那些new才有意义。 试试fastCSharp
            fastCSharp.setup.cSharp.json.parse.From(ref value, json);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧