有点不理解你的需求。
JSON是做对象--字符串转换的,为啥你自己还要传一个teacher对象呢?这个对象的意义是什么?

解决方案 »

  1.   

    翻翻源代码/JavaDoc也许能找到点东西,比如说 json-lib 可以实现 NewBeanInstanceStrategy 来管理对象生成,但是跟楼主的要求有点出入。
    再不行自己扩展/修改类库,万能的
      

  2.   

    不明白,不是json 转为对象吗?
      

  3.   

    json-lib的JSONObject.toBean(String jsonString,Object root,JsonConfig jsonConfig);这个就可以了
      

  4.   

    JSON解析自身的代价就很大,一般来说多一个new基本没什么影响。你要能做到重用JSON解析里面的那些new才有意义。
    试试fastCSharp            fastCSharp.setup.cSharp.json.parse.From(ref value, json);
      

  5.   

    从占用cpu时间上来说,new可能无所谓。但是从gc上就有用了。比如4G新生代,并发量大的时候,如果全部都是new,整个内存的过程就是 0-4G ,gc 4G-0G, 弄不好,还有fullgc.JSONObject支持是吧,很好。gson,好像就不支持,没找到传入object的方法。
      

  6.   

    我是说JSON解析过程中的new很多(假设平均一次10个,一般都不止这个数),而外围只有这一个new。
    这种情况下,外围对象池仅仅减少了10%不到的new,而解析过程中的90%以上的new才是性能杀手。
      

  7.   

    测试了下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
      

  8.   

    谢谢楼上。现在手上维护的项目刚好就是用的Jackson