gpt4 book ai didi

java - 为什么 jackson 这么慢?

转载 作者:行者123 更新时间:2023-12-03 23:20:22 26 4
gpt4 key购买 nike

我使用简单的 Jackson 代码将我的对象转换为 json 字符串,但它真的很慢。仅转换一个对象需要 70 毫秒,如下所示在我的机器上。我做了什么吗?

ObjectMapper myObjectMapper = new ObjectMapper();
void testJson()
{

MyClass state = new MyClass();
try
{
String result = myObjectMapper.writeValueAsString(state);
} catch (Exception ex)
{

}

}

MyClass 只有 4 个成员

 MyClass
{
public int a;
public int b;
public int c;
public String d;
}

最佳答案

I use simple Jackson code to convert from my object to json String, but it really slow. It takes 70 milisecond to convert only one object as below in my machine. Did I do something wong?

70 毫秒来编码和发送 JSON 消息是不可信的。毫无疑问,真正的解释是 70 毫秒的测量是您对代码进行基准测试的方式的产物。可能是您没有考虑到 JVM 预热效果。

所以,是的,您的基准测试不正确。大概吧。

Now I found out three solutions for sending MyClass's instance over network: 1: use Jackson to convert into byte[] and send. 2: use built-in serialization to convert into byte[] and send. 3: convert MyClass's members into String, then into byte[] and send. Is there any other better solution ?

理论上(即,如果您有足够的技能、时间和耐心),最好的性能可以通过手动将数据编码到字节缓冲区中并发送来实现。但这只是理论上的。

如果您正在寻找可能比您尝试过的替代方案更快的实用解决方案,请查看 Google Protocol Buffers .他们以速度快而著称...


70 milliseconds for one object, but when I try 1000 objects, it only takes 114 milliseconds, isn't it strange?

实际上,考虑到 JVM 的工作方式,这一点也不奇怪。

当 JVM 启动时,它会加载您的代码并开始使用字节码解释器运行它。在代码被解释一下之后,JVM 运行 JIT 编译器为经常调用的方法生成优化的 native 代码。此编译过程需要大量时间。

因此,当您测量发送一个对象所花费的时间时,您可能真的测量发送一个对象的时间并进行一堆 JIT 编译。但是 JIT 编译工作不需要重复。最终结果 - 与 1000 个相比,处理一个 似乎 的对象需要花费惊人的时间。

JIT 编译是常见的 JVM 预热效果之一,它会扭曲编写不佳的 Java 基准测试。

关于java - 为什么 jackson 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com