V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Junjunya
V2EX  ›  Java

Java 中 json 字符串转对象(map)、或者对象转 json 字符串慢?

  •  
  •   Junjunya · 2020-03-26 11:07:19 +08:00 · 2800 次点击
    这是一个创建于 1704 天前的主题,其中的信息可能已经有所发展或是发生改变。
    听 Java 同事说,Java 中处理 json 比较耗性能
    好奇为啥会这样,打算做个测试,比较下 Java 和其他语言对 json 处理的快慢,
    所以来问问大佬们,怎么写出性能高的 Java 的处理 json 的代码,方便测试
    11 条回复    2020-03-26 13:40:51 +08:00
    xuanbg
        1
    xuanbg  
       2020-03-26 11:32:39 +08:00
    哪里慢了???反正我从来没觉得序列化 /反序列化是性能瓶颈
    cookii
        2
    cookii  
       2020-03-26 11:36:16 +08:00   ❤️ 1
    处理 json 还不就是 GSON,Fastjson,Jackson 那么几个库,你想手写吗
    hantsy
        3
    hantsy  
       2020-03-26 11:39:47 +08:00
    @imzhoukunqiang 除了这些库外,现在可以用 JakartaEE 标准中 JSON-P,JSONB 解决。
    guixiexiezou
        4
    guixiexiezou  
       2020-03-26 11:47:36 +08:00
    也不算慢吧,大概处理 1 个 json 要 40ms,处理 100 个 json 要 100ms,处理 10000 个 json,要 400ms 吧。看 json 大小
    chendy
        5
    chendy  
       2020-03-26 11:59:57 +08:00
    测试了一下,Jackson
    两个字符串字段,序列化每秒六百五十万次,反序列化每秒四百五十万次
    二十六个字符串字段,序列化每秒一百万次,反序列化每秒四十八万次
    不很快,但是通常不会是瓶颈
    Aresxue
        6
    Aresxue  
       2020-03-26 12:40:08 +08:00
    处理 json 从来都不是瓶颈,至于说比性能,要看谁比, 比 C++肯定不信, 但一些静态语言应该还是比得过的。
    所以要想快用 C++写好, 然后通过 JNI 调用
    Jooooooooo
        7
    Jooooooooo  
       2020-03-26 12:52:04 +08:00
    超大的 String 确实是会慢的, 特别如果你用这个来打日志, 小心用
    Vegetable
        8
    Vegetable  
       2020-03-26 12:59:04 +08:00
    处理 JSON 本身是一个很繁重的工作啊,时间空间都是线性的,好在常用 JSON 都不会太大,很难成为业务瓶颈吧,别想太多。
    Junjunya
        9
    Junjunya  
    OP
       2020-03-26 13:02:24 +08:00
    业务场景是用在生成某个多个表的快照上, 两个方案,一是完全按照表的结构再建多个快照表,另一个方案就是 一个大 json 存原始表的所有数据。

    Java 同事就说 json 非常耗性能,然后就推荐建表来解决这个问题。
    然后我就好奇为什么非常耗性能,打算做个测试比较下
    EscYezi
        10
    EscYezi  
       2020-03-26 13:36:07 +08:00 via iPhone
    如果是表的快照那 json 的长度会很大。之前就遇到过从 redis 里读取一个大概有十多万个元素的 json 数组,每个元素是具有三个属性的 json 对象,然后反序列化的时候程序直接卡住了,后来想办法把 json 对象数组变成字符串数组,才能正常反序列化。
    如果表中数据很多而且有多个字段,反序列化确实会成为瓶颈,不过序列化的时候倒没遇到这个问题
    Giny
        11
    Giny  
       2020-03-26 13:40:51 +08:00
    @Junjunya [楼主] #9 原文:“业务场景是用在生成某个多个表的快照上, 两个方案,一是完全按照表的结构再建多个快照表,另一个方案就是 一个大 json 存原始表的所有数据。Java 同事就说 json 非常耗性能,然后就推荐建表来解决这个问题。然后我就好奇为什么非常耗性能,打算做个测试比较下”
    ======
    回复:个人感觉 方案一更合理一些,如果数据量不大(比如字典表 配置表) 两种方案都差不多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:33 · PVG 07:33 · LAX 15:33 · JFK 18:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.