[QUESTION] 为什么这么慢呢 string 反序列化成java对象 要一秒钟
- Dominant language
- Java
- Stars
- 4.4k
- Forks
- 613
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 6
Description
### 请描述您的问题
*询问有关本项目的使用和其他方面的相关问题。*
`package com.easyis.apaas.common.form.menu;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONReader;
/**
* 研究 从redis 读取 CustomMenuEntity太慢
*
*/
public class TestFastjson2ParseSlow {
static {
/*System.out.println("执行了"+JSONReader.Feature.AllowUnQuotedFieldNames.mask);
JSON.config(JSONReader.Feature.AllowUnQuotedFieldNames);*/
}
public static void toJSONObject(String str) {
long begin =System.currentTimeMillis();
//转jsonObj
Object v = JSON.parseObject(str);
System.out.println("result:"+v.getClass().getName()+" "+v);
long end =System.currentTimeMillis();
long cost = end - begin;
System.out.println("toJSONObject耗时:"+cost);
}
public static void toJavaObjectAutoType(String str) {
long begin =System.currentTimeMillis();
//转jsonObj
@SuppressWarnings("deprecation")
Object v = JSON.parseObject(str, Object.class,JSONReader.Feature.SupportAutoType);
System.out.println("result:"+v.getClass().getName()+" "+v);
long end =System.currentTimeMillis();
long cost = end - begin;
System.out.println("toJavaObjectAutoType耗时:"+cost);
}
public static void toJavaObject(String str,Class clazz) {
long begin =System.currentTimeMillis();
//转jsonObj
//会报错 can not convert to boolean : java.util.HashMap
//Object v = JSON.parseObject(str, clazz);
Object jsonObj = JSON.parse(str);
Object v = JSON.to(clazz, jsonObj);
System.out.println("result:"+v.getClass().getName()+" "+v);
long end =System.currentTimeMillis();
long cost = end - begin;
System.out.println("toJavaObject耗时:"+cost);
}
public static void main(String[] args) throws Exception {
//JSON.config(JSONReader.Feature.AllowUnQuotedFieldNames);
String str="{\"@type\":\"com.easyis.apaas.common.form.menu.CustomMenuEntity\",\"appId\":\"sapp_dev_platform\",\"bottomOperationButton\":\"[{\\\"enable\\\":true,\\\"functionName\\\":\\\"exportApp\\\",\\\"functionCnName\\\":\\\"导出应用\\\",\\\"functionType\\\":\\\"10\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"customActionSetting\\\":\\\"{ \\\\n \\\\n \\\\\\\"action\\\\\\\":\\\\\\\"serviceFunction\\\\\\\",\\\\n\\\\n \\\\\\\"needSelectedRow\\\\\\\": \\\\\\\"single\\\\\\\",\\\\n \\\\n \\\\\\\"actionType\\\\\\\":\\\\\\\"download\\\\\\\",\\\\n \\\\n \\\\\\\"refreshList\\\\\\\":false,\\\\n \\\\\\\"serviceFunction\\\\\\\":\\\\\\\"${appFormService}.exportApp\\\\\\\"\\\\n\\\\n}\\\\n\\\",\\\"condition\\\":\\\"\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"importApp\\\",\\\"functionCnName\\\":\\\"导入应用\\\",\\\"functionType\\\":\\\"10\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"customActionSetting\\\":\\\"{ \\\\n \\\\n \\\\\\\"action\\\\\\\":\\\\\\\"serviceFunction\\\\\\\",\\\\n\\\\n \\\\\\\"formKey\\\\\\\":\\\\\\\"st_ide_import_export_file\\\\\\\",\\\\n \\\\\\\"formData\\\\\\\":{},\\\\n \\\\n \\\\\\\"needSelectedRow\\\\\\\": \\\\\\\"none\\\\\\\",\\\\n \\\\n \\\\\\\"refreshList\\\\\\\":true,\\\\n \\\\\\\"serviceFunction\\\\\\\":\\\\\\\"${appFormService}.importApp\\\\\\\"\\\\n\\\\n}\\\\n\\\",\\\"condition\\\":\\\"\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"batchDisabled\\\",\\\"functionCnName\\\":\\\"批量停用\\\",\\\"functionType\\\":\\\"3\\\",\\\"fieldSetting\\\":[{\\\"field_name\\\":\\\"status\\\",\\\"required\\\":\\\"default\\\",\\\"hide\\\":\\\"default\\\",\\\"readonly\\\":\\\"default\\\",\\\"defaultValue\\\":\\\"\\\",\\\"defaultValueExpression\\\":\\\"\\\",\\\"fieldValue\\\":\\\"1\\\",\\\"fieldValueExpression\\\":\\\"\\\"}],\\\"customActionSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_1\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"batchEnabled\\\",\\\"functionCnName\\\":\\\"批量启用\\\",\\\"functionType\\\":\\\"3\\\",\\\"fieldSetting\\\":[{\\\"field_name\\\":\\\"status\\\",\\\"required\\\":\\\"default\\\",\\\"hide\\\":\\\"default\\\",\\\"readonly\\\":\\\"default\\\",\\\"defaultValue\\\":\\\"\\\",\\\"defaultValueExpression\\\":\\\"\\\",\\\"fieldValue\\\":\\\"0\\\",\\\"fieldValueExpression\\\":\\\"\\\"}],\\\"customActionSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_2\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"batchRecycle\\\",\\\"functionCnName\\\":\\\"批量移动到回收站\\\",\\\"functionType\\\":\\\"3\\\",\\\"fieldSetting\\\":[{\\\"field_name\\\":\\\"status\\\",\\\"required\\\":\\\"default\\\",\\\"hide\\\":\\\"default\\\",\\\"readonly\\\":\\\"default\\\",\\\"defaultValue\\\":\\\"\\\",\\\"defaultValueExpression\\\":\\\"\\\",\\\"fieldValue\\\":\\\"-1\\\",\\\"fieldValueExpression\\\":\\\"\\\"}],\\\"customActionSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_2\\\"}]\",\"createBy\":\"admin\",\"createTime\":\"2024-05-16 17:10:56\",\"customMenuId\":\"1791033582962081792\",\"ds\":\"st_ide_app\",\"keywordQueryFieldsBean\":[{\"camleFieldName\":\"name\",\"field_des_name\":\"null【常规】\",\"field_name\":\"name\",\"field_type\":\"常规\",\"numType\":false,\"orderby\":0}],\"menuCode\":\"sm_1_2\",\"menuIcon\":\"menu-icon fa fa-leaf black\",\"menuName\":\"应用\",\"menuOrder\":\"460\",\"menuType\":1,\"operationButton\":\"[{\\\"enable\\\":true,\\\"functionName\\\":\\\"switchApp\\\",\\\"functionCnName\\\":\\\"切换应用\\\",\\\"functionType\\\":\\\"10\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"customActionSetting\\\":\\\"{ \\\\n \\\\n \\\\\\\"action\\\\\\\":\\\\\\\"serviceFunction\\\\\\\",\\\\n \\\\n \\\\\\\"needSelectedRow\\\\\\\": \\\\\\\"single\\\\\\\",\\\\n\\\\n \\\\\\\"refreshList\\\\\\\":true,\\\\n \\\\\\\"refreshListTimeout\\\\\\\":0,\\\\n \\\\\\\"serviceFunction\\\\\\\":\\\\\\\"${appFormService}.switchApp\\\\\\\"\\\\n\\\\n}\\\",\\\"condition\\\":\\\"TV_1\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"disabled\\\",\\\"functionCnName\\\":\\\"停用\\\",\\\"functionType\\\":\\\"3\\\",\\\"fieldSetting\\\":[{\\\"field_name\\\":\\\"status\\\",\\\"required\\\":\\\"default\\\",\\\"hide\\\":\\\"default\\\",\\\"readonly\\\":\\\"default\\\",\\\"defaultValue\\\":\\\"\\\",\\\"defaultValueExpression\\\":\\\"\\\",\\\"fieldValue\\\":\\\"1\\\",\\\"fieldValueExpression\\\":\\\"\\\"}],\\\"customActionSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_1\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"enabled\\\",\\\"functionCnName\\\":\\\"启用\\\",\\\"functionType\\\":\\\"3\\\",\\\"fieldSetting\\\":[{\\\"field_name\\\":\\\"status\\\",\\\"required\\\":\\\"default\\\",\\\"hide\\\":\\\"default\\\",\\\"readonly\\\":\\\"default\\\",\\\"defaultValue\\\":\\\"\\\",\\\"defaultValueExpression\\\":\\\"\\\",\\\"fieldValue\\\":\\\"0\\\",\\\"fieldValueExpression\\\":\\\"\\\"}],\\\"customActionSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_2\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"recycle\\\",\\\"functionCnName\\\":\\\"移动到回收站\\\",\\\"functionType\\\":\\\"3\\\",\\\"fieldSetting\\\":[{\\\"field_name\\\":\\\"status\\\",\\\"required\\\":\\\"default\\\",\\\"hide\\\":\\\"default\\\",\\\"readonly\\\":\\\"default\\\",\\\"defaultValue\\\":\\\"\\\",\\\"defaultValueExpression\\\":\\\"\\\",\\\"fieldValue\\\":\\\"-1\\\",\\\"fieldValueExpression\\\":\\\"\\\"}],\\\"customActionSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_2\\\"}]\",\"orderFields\":[{\"@type\":\"com.alibaba.fastjson2.JSONObject\",\"field_name\":\"app_id\",\"order\":\"DESC\"}],\"orderbyFieldsBean\":[{\"field\":{\"camleFieldName\":\"appId\",\"field_des_name\":\"null【常规】\",\"field_name\":\"app_id\",\"field_type\":\"常规\",\"numType\":false,\"orderby\":0},\"orderByOrder\":\"DESC\"}],\"pageBtnsEnabledMap\":{\"@type\":\"java.util.HashMap\",\"add\":true,\"batchDel\":true,\"edit\":true,\"del\":true,\"list\":true},\"pageButton\":\"[{\\\"enable\\\":true,\\\"functionName\\\":\\\"list\\\",\\\"functionCnName\\\":\\\"查询\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"add\\\",\\\"functionCnName\\\":\\\"添加\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"edit\\\",\\\"functionCnName\\\":\\\"修改\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_4\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"del\\\",\\\"functionCnName\\\":\\\"删除\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_3\\\"},{\\\"enable\\\":true,\\\"functionName\\\":\\\"batchDel\\\",\\\"functionCnName\\\":\\\"删批量除\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"TV_3\\\"},{\\\"enable\\\":false,\\\"functionName\\\":\\\"batchEdit\\\",\\\"functionCnName\\\":\\\"批量编辑\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"\\\"},{\\\"enable\\\":false,\\\"functionName\\\":\\\"importData\\\",\\\"functionCnName\\\":\\\"导入\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"\\\"},{\\\"enable\\\":false,\\\"functionName\\\":\\\"exportData\\\",\\\"functionCnName\\\":\\\"导出\\\",\\\"fieldSetting\\\":\\\"\\\",\\\"condition\\\":\\\"\\\"}]\",\"pageButtonEntity\":[{\"condition\":\"\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"查询\",\"functionName\":\"list\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"新增\",\"functionName\":\"add\",\"position\":\"top\"},{\"condition\":\"TV_4\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"修改\",\"functionName\":\"edit\",\"position\":\"row\"},{\"condition\":\"TV_3\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"删除\",\"functionName\":\"del\",\"position\":\"row\"},{\"condition\":\"TV_3\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"批量删除\",\"functionName\":\"batchDel\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":false,\"functionCnName\":\"批量编辑\",\"functionName\":\"batchEdit\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":false,\"functionCnName\":\"导入\",\"functionName\":\"importData\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":false,\"functionCnName\":\"导出\",\"functionName\":\"exportData\",\"position\":\"top\"}],\"pageButtonEntityCach\":[{\"condition\":\"\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"查询\",\"functionName\":\"list\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"新增\",\"functionName\":\"add\",\"position\":\"top\"},{\"condition\":\"TV_4\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"修改\",\"functionName\":\"edit\",\"position\":\"row\"},{\"condition\":\"TV_3\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"删除\",\"functionName\":\"del\",\"position\":\"row\"},{\"condition\":\"TV_3\",\"defaultBtn\":true,\"enable\":true,\"functionCnName\":\"批量删除\",\"functionName\":\"batchDel\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":false,\"functionCnName\":\"批量编辑\",\"functionName\":\"batchEdit\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":false,\"functionCnName\":\"导入\",\"functionName\":\"importData\",\"position\":\"top\"},{\"condition\":\"\",\"defaultBtn\":true,\"enable\":false,\"functionCnName\":\"导出\",\"functionName\":\"exportData\",\"position\":\"top\"}],\"pageCode\":\"sm_1_2\",\"pageQuerySet\":{\"keyword_query\":\"name\",\"simple_query\":[{\"@type\":\"com.alibaba.fastjson2.JSONObject\",\"field_name\":\"status\",\"operation\":\"=\",\"isBetweenAnd\":false}]},\"quickTagViews\":\"\",\"reportId\":\"\",\"showFieldsBean\":[],\"sysMenuType\":\"3\",\"tabViews\":\"TV_4:全部,TV_3:回收站\",\"tableId\":\"st_ide_app\",\"tenantId\":\"0:sapp_dev_platform\",\"updateBy\":\"admin\",\"updateTime\":\"2024-08-27 02:27:58\"}\r\n";
//转jsonObj 574 627 693 605
//toJSONObject(str);
//转java对象指定class 1050 969 966
for (int i = 0; i < 10; i++) {
new Thread() {
@Override
public void run() {
toJavaObject(str,com.easyis.apaas.common.form.menu.CustomMenuEntity.class);
}
}.start();
}
// 转java对象 935 936 1023 973
//toJavaObjectAutoType(str);
}
}`
Contributor guide
Research direction
Start with the TestFastjson2ParseSlow main method and its toJSONObject, toJavaObjectAutoType, and toJavaObject methods, then run the supplied benchmark with CustomMenuEntity. Compare parsing, conversion, auto-type handling, and the ten concurrent threads separately; done means identifying which stage accounts for the reported delay and documenting a reproducible result.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100