public UserEntity string2Obj(String json) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.readValue(json, UserEntity.class); } public String obj2String(UserEntity userEntity) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.writeValueAsString(car) }这样的代码到处可见,有问题吗?你要说他有问题吧,确实能正常执行;可你要说没问题吧,在追求性能的同学眼里,这属实算是十恶不赦的代码了。
@BenchmarkMode(Mode.Throughput) @OutputTimeUnit(TimeUnit.SECONDS) @State(Scope.Thread) @Fork(1) @Warmup(iterations = 5, time = 1) @Measurement(iterations = 3, time = 1) public class JsonJMHTest { String json = "{\"id\":122345667,\"email\":\"jianzh5@163.com\",\"price\":12.25}"; UserEntity userEntity = new UserEntity(13345L,"jianzh5@163.com", BigDecimal.valueOf(12.25)); /** * 测试String to Object */ @Benchmark public UserEntity objectMapper2ObjTest() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.readValue(json, UserEntity.class); } /** * 测试Object to String */ @Benchmark public String objectMapper2StringTest() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.writeValueAsString(userEntity); } // 堆代码 duidaima.com public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() .include(JsonJMHTest.class.getSimpleName()) .build(); new Runner(opt).run(); } }测试环境
# JMH version: 1.36 # VM version: JDK 17.0.3, OpenJDK 64-Bit Server VM, 17.0.3+7-LTS # Mac AppleM1/16GB
测试结果
@Getter public enum ObjectMapperInstance { INSTANCE; private final ObjectMapper objectMapper = new ObjectMapper(); ObjectMapperInstance() { } }再次使用JMH对其测试:
@Benchmark public UserEntity singleten2ObjTest() throws JsonProcessingException { ObjectMapper objectMapper = ObjectMapperInstance.INSTANCE.getObjectMapper(); return objectMapper.readValue(json, UserEntity.class); } @Benchmark public String singleten2StringTest() throws JsonProcessingException { ObjectMapper objectMapper = ObjectMapperInstance.INSTANCE.getObjectMapper(); return objectMapper.writeValueAsString(userEntity); }测试结果如下:
@Getter public enum ObjectMapperInstance { INSTANCE; private final ObjectMapper objectMapper; ObjectMapperInstance() { objectMapper = new ObjectMapper(); // 注册自定义模块 initialize(); } private void initialize() { CustomJsonModule customJsonModule = new CustomJsonModule(); objectMapper.registerModule(customJsonModule); } }在initialize()方法中给ObjectMapper注册自定义序列化转换器。