深拷贝(clone)最佳实践 -- 考虑拷贝消耗的cpu和拷贝速度

java new 和 clone 的效率比较 在java中对于生成新的对象,我们常常用new来创建对象,但是new看起来不是那么的快速,好像是个很费资源的操作,而clone看起来比new要好的多,那么事实真的如此吗? 阅读详情

深拷贝(clone)是java开发过程中经常遇到问题,有人用io流、有人用json序列化、有人循环拷贝属性等等,网上文章都能实现功能。
问题:
clone是计算操作,消耗cpu如果速度慢(高并发场景几十ms也是非常慢的)会导致程序卡顿,qps降低。网上解决方案都没有提到性能问题,我实际使用后对性能进行了优化,最后推荐:FastClone

FastClone介绍

FastClone是一款非常好用,支持大部分场景深克隆和浅克隆的工具。被推荐的不多,被埋没了。

<dependency>
	<groupId>com.github.bruce-cloud</groupId>
	<artifactId>fastclone</artifactId>
	<version>1.0.RELEASE</version>
</dependency>

用法:

// 深克隆list
FastClone fastClone = new FastClone();
List<T> clone = fastClone.clone(src);

// 深克隆list
FastClone fastClone = new FastClone();
List<T> clone = fastClone.cloneShallow(src);

性能对比

我们项目中用了三种方式对大对象进行深克隆对比clone:
1. 使用io流
写入再读取出来,平均耗时:52ms,也就是会占用52ms的cpu。

    public static <T> List<T> deepCopy(List<T> src) {
        try {
            ByteArrayOutputStream byteout = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(byteout);
            out.writeObject(src);
            ByteArrayInputStream bytein = new ByteArrayInputStream(byteout.toByteArray());
            ObjectInputStream in = new ObjectInputStream(bytein);
            @SuppressWarnings("unchecked")
            List<T> dest = (List<T>) in.readObject();
            return dest;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

在这里插入图片描述
2. 使用阿里巴巴fastjson反序列化
先转json再转对象,平均耗时65ms,也就是会占用65ms的cpu。

String jsonString = JSON.toJSONString(arrayList);
List<Symbol> configCoinSymbols = JSON.parseArray(jsonString, Symbol.class);

在这里插入图片描述
2. 使用FastClone反序列化
平均耗时3.4ms,也就是会占用3.4ms的cpu。比其他方式快了将近20倍。
有个缺点,就是不支持ConcurrentHashMap,其他主流集合都支持。

    public static <T> List<T> deepCopy(List<T> src) {
        FastClone fastClone = new FastClone();
        try {
            List<T> clone = fastClone.clone(src);
            return clone;
        } catch (Exception e) {
            log.error("deepCopy 克隆失败", e);
            throw new ExchangeException("deepCopy 克隆失败");
        }
    }

在这里插入图片描述

结论

复杂对象使用其他方式深克隆,会导致cpu飙升,qps下降,接口响应超时等情况。FastClone性能方面非常好。

Java设计模式之原型模式详解:从入门到精通 原型模式的核心思想就是**“克隆”**。它不再关心对象是如何通过构造函数一步步创建出来的,而是关心如何从一个已经存在的对象(即“原型”)快速、高效地复制出一个一模一样的新对象。 这个过程就好比: 生物克隆: 克隆羊多利,它不是通过羊爸爸和羊妈妈“自然繁殖”产生的,而是以一只成年母羊的体细胞为“原型”,复制出来的一个全新个体。新个体拥有和原型完全相同的遗传信息。 文档处理: 你精心制作了一份复杂的Word报告模板,包含了格式、图表、目录等。下次需要写类似报告时,你不会从空白文档开始,而是直接“另存为”一份 阅读详情

相关推荐

国产AI编程工具横向评测:从Claude Code平替到本地化部署实践

AI编程助手正成为提升开发效率的关键技术,其核心原理是基于大语言模型对代码语义的理解与生成。这类工具通过分析上下文、学习编程模式,能够实现代码自动补全、智能生成、错误调试等功能,为开发者提供实时辅助。其技术价值在于显著降低重复编码工作量,加速开发迭代周期,并帮助开发者快速掌握新技术栈。在实际应用场景中,AI编程助手尤其适用于快速原型构建、代码重构、文档生成以及单元测试编写等任务。本文聚焦于国产AI编程工具,深入探讨了以通义灵码、CodeGeeX为代表的本地化部署方案,并详细对比了它们在代码生成、问题修复等核

clijovtbq401783153的博客 310

深拷贝最佳实践:考虑拷贝消耗的 CPU 和拷贝速度

3. 使用 FastClone 反序列化平均耗时 3.4ms,也就是会占用 3.4ms 的 CPU。网上解决方案都没有提到性能问题,我实际使用后对性能进行了优化,最后推荐 FastClone。2. 使用阿里巴巴 fastjson 反序列化先转 JSON 再转对象,平均耗时 65ms,也就是会占用 65ms 的 CPU。复杂对象使用其他方式深克隆,会导致 CPU 飙升,QPS下降,接口响应超时等情况。1. 使用 IO 流写入再读取出来,平均耗时 52ms,也就是会占用 52ms 的 CPU。

DeveloperFire的博客 875

C++海康相机高帧率逐帧存图:生产者-消费者模型与SDK回调优化实践

在机器视觉与工业自动化领域,稳定高效地采集并存储图像数据是核心基础。其原理在于通过软件架构将图像采集(生产)与磁盘写入(消费)过程解耦,以应对高帧率下的性能瓶颈。这一技术的核心价值在于保障数据完整性、防止丢帧,并充分利用多核CPU资源,从而满足工业检测、安防监控等场景对长时间、高稳定性采集的需求。本文聚焦于海康威视相机SDK,深入剖析了如何利用回调取流机制与线程安全队列,构建一个鲁棒的C++逐帧存图工具,并针对图像编码、文件命名及异常处理等工程细节提供了优化方案。

weixin_34409357的博客 402

Java - 使用 JSON 序列化/反序列化深拷贝解决方案

Java - 使用 JSON 序列化/反序列化深拷贝解决方案

1388

git-fastclone, 关于类固醇,git clone 递归.zip

git-fastclone, 关于类固醇,git clone 递归 fastclone git fastclone是类固醇的git clone --recursive 。为什么 fastclone?在特定机器上进行大量重复签出?知识库 1st Fastclone 2nd Fastc

EEGLAB安装、EDF数据导入、EEG预处理(Matlab)

目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保

y18771025420的博客 1万+

Java深度拷贝方式和性能对比

二、性能对比 创建一个50个字段的对象,并使用不同的深度拷贝方式,创建对象N多遍。 @Data @NoArgsConstructor @AllArgsConstructor public class DeepCopyEntity implements Cloneable, Serializable { /** * 序列化标识 */ private static final long serialVersionUID...

it_lihongmin的博客 4686

Multisim仿真电路:(十二)MOS管缓启动电路设计与优化

本文详细介绍了基于Multisim的MOS管缓启动电路设计与优化方法。通过分析米勒平台效应,探讨RC参数选择、多级设计和有源电路等技巧,有效抑制冲击电流并优化开关损耗。文章结合仿真实例,提供实用的设计策略和实际应用注意事项,帮助工程师提升电源管理系统的可靠性。

pytorch8learner的博客 237

深度拷贝 java_Java深度拷贝方式和性能对比

前言Java的深度拷贝大致分为克隆(实现Java的Clone接口)和序列化(实现Java的Serializable接口)两种,但是基于不同的序列化方式,有可以延伸出几种方式。下面分析一下每种的注意事项和性能对比【当前电脑为4核16G,只是当前使用main方法单线程测试】。一、拷贝和深浅拷贝可以使用Java native方法提供的Clone方式进行对象的拷贝,其性能是最高的,甚至高过new 关键字。...

weixin_42307436的博客 445

【低空经济】低空无人驾驶航空器运行管理系统设计方案

低空无人驾驶航空器运行管理系统(以下简称“系统”)旨在为低空域内的无人驾驶航空器(UAV)提供高效、安全、智能的运行管理服务。系统通过集成先进的通信、导航、监控、数据处理和人工智能技术,实现对低空域内无人驾驶航空器的实时监控、动态调度、风险评估和应急响应,确保其在复杂空域环境中的安全运行。系统的核心功能包括空域管理、飞行计划审批、实时监控、冲突预警、应急管理和数据分析。空域管理模块负责划分和管理低空域资源,确保不同飞行任务之间的空域隔离和高效利用。

2502_92579126的博客 1140

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1897

Java深拷贝实战:从原理到方案,避免数据污染的必备技能

在Java编程中,对象拷贝是处理数据隔离与线程安全的基础概念。浅拷贝仅复制引用,导致多个变量指向同一内存对象,修改副本会影响原始数据,这是许多隐蔽Bug的根源。深拷贝则递归复制对象及其所有引用对象,生成完全独立的副本,从而确保数据操作的隔离性,这是构建健壮、可预测系统的关键技术价值。在缓存安全使用、DTO隔离、原型模式实现以及函数式编程避免副作用等应用场景中,正确实现深拷贝至关重要。本文通过剖析一次由浅拷贝引发的线上事故,深入探讨了深拷贝的实现原理与多种实战方案,涵盖了手动赋值、重写clone()、序列化、

weixin_33881140的博客 389

Python 静态导入与动态导入

python中模块的静态导入 与 动态导入(运行时指定模块),以及具体对应示例。

慢也好,步子小也好,往前走就好~ 717

pypdf性能优化:提升PDF处理速度的10个实用建议

pypdf是一个纯Python PDF库,能够对PDF文件的页面进行拆分、合并、裁剪和转换等操作。对于经常处理PDF文件的用户来说,优化pypdf的性能,提升PDF处理速度至关重要。本文将为你介绍10个实用的pypdf性能优化建议,帮助你更高效地处理PDF文件。 ## 1. 合理使用增量更新模式 在处理大型PDF文件时,使用增量更新模式可以显著减少不必要的资源消耗。当你只需要对PDF文件进行部分

gitblog_00007的博客 484

从零构建高精度温控系统:ADN8835的单电感拓扑与0.01℃稳定性实战解析

本文深入解析了如何利用ADN8835构建高精度温控系统,重点介绍了其创新的单电感拓扑架构如何实现0.01℃的长期稳定性。内容涵盖精密PCB布局、电源滤波设计,并详细阐述了针对不同热容负载的数字PID控制参数整定策略,为开发精密仪器和医疗设备提供了实战指南。

r2s3t4的博客 238

1.2 博图TIA的轨迹(Trace)功能介绍

在TIA中“轨迹” ( Traces ) 能来记录设备变量并对记录进行评估,对有些故障排查很有帮助,本文进行介绍

qq_34047402的博客 1646

JSON数据处理以及常用方法、yaml、json diff patch

如果是一个字符串,表示使用该字符串作为缩进。如果是一个数字,表示缩进的空格数;

luemeon的博客 1923

YOLO26训练自己的数据集,从代码下载到实例测试 (含YOLO26网络结构图)

在Windows10上配置CUDA环境教程2026年1月14日,YOLO26是最新发布的计算机视觉模型。支持多种任务,包括目标检测、实例分割、图像分类、姿态估计、有向目标检测以及物体跟踪等。以上就是YOLO26训练自己数据集的全部过程啦,欢迎大家在评论区交流~

Limiiiing的博客 6507

iPhone 15 Pro本地运行200亿参数大模型:127 tokens/s速度实测与部署指南

大型语言模型(LLM)通过模拟人类语言模式进行文本生成与理解,其核心原理基于Transformer架构的海量参数计算。随着模型压缩与硬件加速技术的发展,LLM正从云端向边缘设备延伸,催生了移动端本地AI推理的新范式。这一趋势的技术价值在于实现了低延迟、高隐私的智能交互,为离线助手、隐私敏感应用等场景提供了可行方案。Maple-Preview-20B-A1B模型正是这一方向的典型代表,它利用Apple Silicon芯片的**MLX框架**与**llama.cpp**工具链优化,在iPhone 15 Pro上

weixin_30740295的博客 319

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

前端面试锦集

基本面试: 做过最满意的项目是什么?项目背景?为什么要做这件事情?最终达到什么效果?你处于什么样的角色,起到了什么方面的作用?在项目中遇到什么技术问题?具体是如何解决的? 如果再做这个项目,你会在哪些方面进行改善? 基础扎实: IT行业,哪些发展好的同学都是具备扎实基础知识,如果理解计算机基础会更好,因为我们面临很多非前端计算问题的。 主动思考: 被动完成任务成长会很慢的,需要有自己的想法,而不是仅仅是完成任务的。 自动学习: 前端领域知识淘汰速度很快,需要经常学习新知识。 追溯深度: 遇到问题是多研究背.

Front小思的博客 6724

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++23种设计模式

本文详细介绍了C++中的23种设计模式,创建型模式、结构型模式和行为型模式。

ATTOTC的博客 592

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Rust开发者进阶必备:掌握所有权与借用规则的4种实战模式

掌握Rust所有权规则是解决内存安全与并发问题的关键。本文详解4种实战模式,涵盖函数传参、字符串处理、集合操作与借用优化,助你规避常见编译错误,提升代码效率。Rust开发者进阶必备,值得收藏。

PixelIsle的博客 695

现代C++工程实践:包管理、实用函数与性能优化全解析

C++作为高性能系统编程的核心语言,其工程化实践是构建稳定、高效软件的关键。从概念上讲,现代C++开发已从单纯的语法掌握,演进为对项目结构、代码复用和运行时效率的系统性管理。其核心原理在于通过声明式依赖管理(如vcpkg、Conan)解决第三方库的集成难题,通过构建高内聚的实用函数库提升代码复用率,并通过多层次的性能剖析与优化确保程序高效运行。这些技术的核心价值在于提升开发效率、保障代码质量并充分发挥C++的性能优势,广泛应用于游戏引擎、高频交易、嵌入式系统等对性能有严苛要求的场景。本文聚焦于包管理、实用函

359
上一篇: Arthas jvm诊断工具入门到精通
下一篇: 阿里巴巴P3C java编程规范(最新版github下载)
鲫鱼哥
博客等级 码龄10年 18粉丝 36原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值