Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么多个ObjectMapper Instances创建不成功';不要花太多时间?_Java_Jackson - Fatal编程技术网

Java 为什么多个ObjectMapper Instances创建不成功';不要花太多时间?

Java 为什么多个ObjectMapper Instances创建不成功';不要花太多时间?,java,jackson,Java,Jackson,我执行一个简单的测试——在一行中创建几个ObjectMapper对象。我这样做是因为我想了解它的成本。有很多资料说ObjectMapper是线程安全的,而且创建它的工作量很大。所以我希望看到的是,每个ObjectMapper创建都需要一些时间。但是当我在Eclipse调试器中浏览这些行时,我发现只有第一次创建ObjectMapper需要一些时间。有人能解释为什么吗?这是一些编译器优化吗?还是我遗漏了什么? 这是我的测试: String inputString = "{\"key1\":\

我执行一个简单的测试——在一行中创建几个ObjectMapper对象。我这样做是因为我想了解它的成本。有很多资料说ObjectMapper是线程安全的,而且创建它的工作量很大。所以我希望看到的是,每个ObjectMapper创建都需要一些时间。但是当我在Eclipse调试器中浏览这些行时,我发现只有第一次创建ObjectMapper需要一些时间。有人能解释为什么吗?这是一些编译器优化吗?还是我遗漏了什么? 这是我的测试:

    String inputString = "{\"key1\":\"value1\"}";
    String inputString2 = "{\"key2\":\"value2\"}";
    String inputString3 = "{\"key3\":\"value3\"}";
    String inputString4 = "{\"key4\":\"value4\"}";

    try {
        HashMap<String, Object> map = new ObjectMapper().readValue(inputString, HashMap.class);
        HashMap<String, Object> map2 = new ObjectMapper().readValue(inputString2, HashMap.class);
        HashMap<String, Object> map3 = new ObjectMapper().readValue(inputString3, HashMap.class);
        HashMap<String, Object> map4 = new ObjectMapper().readValue(inputString4, HashMap.class);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
String inputString=“{\'key1\':\'value1\'”;
字符串inputString2=“{\'key2\':\'value2\'”;
字符串inputString3=“{\'key3\':\'value3\'”;
字符串inputString4=“{\'key4\':\'value4\'”;
试一试{
HashMap map=newObjectMapper().readValue(inputString,HashMap.class);
HashMap map2=new ObjectMapper().readValue(inputString2,HashMap.class);
HashMap map3=new ObjectMapper().readValue(inputString3,HashMap.class);
HashMap map4=new ObjectMapper().readValue(inputString4,HashMap.class);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}

我查看了
ObjectMapper
实例的初始化,可以验证所描述的行为:

StopWatch '': running time = 2323937394 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
2233845422  096 %  map1
030696401  001 %  map2
029092790  001 %  map3
030302781  001 %  map4
原因似乎是初始化了
ObjectMapper
实例的静态块和静态成员字段,该实例仅在第一次加载类时运行

在执行
ObjectMapper
构造函数之前,将执行
com.fasterxml.jackson.databind.ObjectMapper。(
静态初始值设定项,它设置
ObjectMapper
实例的所有静态字段,如
com.fasterxml.jackson.databind.cfg.BaseSettings。(


此后,当第一次运行
ObjectMapper
构造函数时,初始化其非静态成员的所有静态字段和静态块,例如
com.fasterxml.jackson.core.JsonFactory。(
,这需要额外的时间。这些静态初始化步骤仅在第一次执行构造时运行。

测量结果在哪里?此外,使用调试器进行任何与时间相关的基准测试都是错误的。