最近对自己写的elasticsearch客户端框架在进行性能优化,数据插入部分使用的是JAVABean对象方式传参,框架内部使用了fastjson进行对象转json字符串的操作,尝试着使用不同方式进行对象转json字符串操作。找到了一种性能更好的方式,具体请看下面代码段:

package test;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import java.lang.reflect.Field;
import java.util.List;/*** Created by memory_fu on 2021/1/7.*/
public class ReflectasmTest {public static void main(String[] args) throws IllegalAccessException {Person person = new Person();person.setAge(10);person.setId("1");person.setName("傅浩");person.setHobby("ball");int sumCount = 20000000;// 循环次数long l1 = System.currentTimeMillis();for (int i = 0; i < sumCount; i++) {testFastJSON(person);}System.out.println("fastjson方式转换=====: " + (System.currentTimeMillis() - l1) + " ms.");long l2 = System.currentTimeMillis();for (int i = 0; i < sumCount; i++) {testReflection(person);}System.out.println("JAVA反射方式转换=====: " + (System.currentTimeMillis() - l2) + " ms.");}/*** 方式一:* fastjson 对象转为JSON字符串*/public static <T> void testFastJSON(T vo) throws IllegalAccessException {String string = JSON.toJSONString(vo);JSONObject jsonObject = JSON.parseObject(string);String str = jsonObject.toJSONString();
//        System.out.println(str);}public static List<Field> fields = null;/*** 反射方式拿到类的field集合*/public static <T> List<Field> init(T vo) {Class<?> aClass = vo.getClass();fields = Lists.newArrayList();for (Class i = aClass; i != Object.class; i = i.getSuperclass()) {Field[] declaredFields = i.getDeclaredFields();for (Field field : declaredFields) {fields.add(field);}}return fields;}/*** 方式二:* 反射方式  对象转为JSON字符串*/public static <T> void testReflection(T vo) throws IllegalAccessException {if (fields == null) {init(vo);}JSONObject jsonObject = new JSONObject();for (Field field : fields) {jsonObject.put(field.getName(), field.get(vo));}String str = jsonObject.toJSONString();
//        System.out.println(str);}}

基于2000万数据进行测试结果:

fastjson方式转换=====: 19843 ms.
JAVA反射方式转换=====: 9019 ms.

可以明显看出使用JAVA反射方式性能比使用fastjson要高,具体原因是因为fastjson转换内部有很多数据格式校验,而我们使用反射方式没有这些校验,所以性能提升明显。

结论: 对于业务开发过程中,要进行性能优化并且对数据内容格式已知情况下,可使用 方式二 进行定制性优化。

JAVA对象转json字符串性能优化相关推荐

  1. Gson案例:Java对象与JSON字符串相互转换

    Gson案例:Java对象与JSON字符串相互转换 一.Gson概述 Gson是一个Java类库,可将Java对象转换为相应的JSON形式,也可以将JSON字符串转换为对应的Java对象.Gson是一 ...

  2. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency><groupId>com.alibaba</groupId><artif ...

  3. java对象与json字符串的互相转换

    java对象与json字符串的互相转换 1.采用 net.sf.json.JSONObject maven依赖包: 1 <dependency> 2 <groupId>net. ...

  4. 【实用】Java对象与JSON字符串的互转,实用操作!

    最近,工作中会涉及到Java对象与JSON字符串相互转换,虽然说并不难,但打算还是梳理一番,主要内容有: JSON 字符串 转 普通对象 普通对象 转 JSON 字符串 JSON 字符串数组 转 Li ...

  5. java处理json字符串_常见java对象转换为json字符串处理!!!

    1.JSON简介 1. 概念: JavaScript Object NotationJavaScript对象表示法 Person p = new Person(); p.setName("张 ...

  6. ObjectMapper实现将Java对象转为json字符串

    ObjectMapper调用 添加pom依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId>&l ...

  7. Java对象 转 JSON 字符串

    本案例所有代码均为原创,使用Java1.8类库编写,没有借鉴其他类似工具库和网上论坛博客,也许没有经过充分测试,可能出现未知bug,仅供参考学习使用. Java对象就像一个文件夹一样,没有办法知道其深 ...

  8. 使用jackson对Java对象与JSON字符串相互转换的一些总结

    总结一下自己使用 jackson 处理对象与 JSON 之间相互转换的心得. jackson 是一个用 Java 编写的,用来处理 JSON 格式数据的类库,它速度非常快,目前来看使用很广泛,逐渐替代 ...

  9. Java详解:java对象转json字符串不加引号

    一面 自我介绍 项目中的监控:那个监控指标常见的有哪些? 微服务涉及到的技术以及需要注意的问题有哪些? 注册中心你了解了哪些? consul 的可靠性你了解吗? consul 的机制你有没有具体深入过 ...

最新文章

  1. python面向对象的优点_Python面向对象编程——总结面向对象的优点
  2. ef连接mysql报root没有权限_想要远程连接MySQL,赋予root权限没用啊?一直报语法错误...
  3. 工业富联2018年报来了!上市后首张成绩单大起底
  4. 07年了,新的一年又开始了
  5. apcloud混合式开发app学习笔记
  6. [翻译]Keeping your JavaScript out of the global scope
  7. 超级日志服务器-Splunk
  8. vue 日期选择器默认时间_vue-datepicker
  9. Google要回归国内,百度李彦宏居然不怕?我想笑
  10. Matlab数据插值-内插、外插
  11. OpenCV学习(13) 细化算法(1)(转)
  12. python 学堂在线_学习Python编程学堂在线试题及答案
  13. WinHex修改二进制数据后无法保存的可能原因
  14. 计算机四级等级考试网络工程师知识点-【操作系统原理+计算机网络两科完整】
  15. CentOS6.7 i686上安装JDK7
  16. 论文写作课程心得体会
  17. 中国经济形势开年如何看?
  18. unity3d发布安卓出错plese set the package name
  19. linux磁盘分区6,Linux学习笔记(6)磁盘分区(LVM)
  20. 无线通信学习笔记(一)

热门文章

  1. 什么是管道?(详解进程间是如何通过管道通信的)
  2. Unity 之刚体,碰撞体,触碰器
  3. 给大家推荐一款国产替代STM32F103VBT6的MCU
  4. linux keepalived配置参数详解
  5. python实现对文本内容的修改_介绍python对文件操作实现全文或单行替换
  6. 一种基于北斗差分的导线弧垂监测装置
  7. 基于ATtiny85轻松制作一款智能手表
  8. python 输入语句
  9. 【JAVA】<深入理解>异常处理
  10. py使用boxplot绘箱形图