Fastjson1 性能优化指南
Fastjson 是阿里巴巴开源的 JSON 处理库,凭借其卓越的性能和丰富的 API 深受 Java 开发者喜爱。对于初学者来说,掌握 Fastjson 的优化技巧不仅能提升应用响应速度,还能减少内存消耗。本文将带你逐步了解如何通过正确使用 Fastjson 1.x 来优化性能。
为什么需要性能优化?
在高并发场景下,JSON 序列化与反序列化可能成为系统瓶颈。不合理的配置或使用方式会导致 CPU 飙升、内存溢出等问题。优化后,同样的 JSON 操作速度可提升数倍。
核心优化技巧
1. 配置复用
复用 SerializeConfig 和 SerializerFeature
每次创建 SerializeConfig 对象会消耗资源,建议将其声明为静态常量:
private static final SerializeConfig CONFIG = new SerializeConfig();
private static final SerializerFeature[] FEATURES = {
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteMapNullValue
};
使用时直接引用:
String json = JSON.toJSONString(object, CONFIG, FEATURES);
2. 启用循环引用检测的禁用
Fastjson 默认会检测循环引用,这在无循环依赖的对象中属于无用开销。禁用后性能提升明显:
// 方式一:全局禁用
SerializerFeature.DisableCircularReferenceDetect
// 方式二:单个对象禁用
JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
3. 预定义类型信息
反序列化时提前指定类型,避免 Fastjson 自动推断类型带来性能损失:
// 不推荐:需要类型推断
User user = JSON.parseObject(json, User.class);
// 推荐:显式指定类型(性能更优)
Type type = new TypeReference<List<User>>(){}.getType();
List<User> list = JSON.parseObject(json, type);
4. 使用 Feature 快速配置
Feature 类提供多个优化选项,典型优化组合:
// 启用自动关闭流、禁止特殊字符转义
String json = JSON.toJSONString(obj,
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteNonStringValueAsString
);
5. 批量操作优化
处理大量 JSON 数据时,避免频繁创建对象,使用 JSONArray 和 JSONObject 直接操作:
// 高效:直接操作 JSONObject
JSONObject obj = JSON.parseObject(jsonStr);
String name = obj.getString("name");
// 不推荐:反复序列化
User user = JSON.parseObject(jsonStr, User.class);
String name = user.getName();
性能对比示例
以下测试代码展示优化前后的差异:
public class PerformanceTest {
public static void main(String[] args) {
// 准备测试数据
List<User> users = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
users.add(new User("user" + i, i));
}
// 优化前
long start = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
String json = JSON.toJSONString(users);
}
System.out.println("优化前耗时:" + (System.currentTimeMillis() - start) + "ms");
// 优化后
start = System.currentTimeMillis();
SerializeConfig config = new SerializeConfig();
config.setAsmEnable(true); // 启用 ASM
for (int i = 0; i < 100; i++) {
String json = JSON.toJSONString(users, config,
SerializerFeature.DisableCircularReferenceDetect);
}
System.out.println("优化后耗时:" + (System.currentTimeMillis() - start) + "ms");
}
}
典型输出结果(运行环境不同会有差异):
优化前耗时:194ms
优化后耗时:81ms
性能提升约 2-3 倍。
实战建议
- 缓存结果:对于频繁返回的相同 JSON 结果,使用缓存(如
ConcurrentHashMap)避免重复序列化。 - 预编译 JSON:使用
JSON.toJSONString(object, config)替代JSON.toJSONString(object),减少反射调用。 - 监控与调优:结合 JProfiler 等工具分析实际场景中的热点,针对性优化。
总结
Fastjson 性能优化并非高深技术,通过合理复用配置、禁用非必要特性、精确指定类型等简单操作,即可实现显著性能提升。建议在项目初期就引入这些优化习惯,避免后期大规模重构。

