System.arraycopy和Arrays.copyOf的原理解剖

简介: 数组的复制其实在很多业务情况下会用到,不同的业务情况下选择适合的方式来实施复制是每个开发人员要考虑的事情。了解System.arraycopy、Arrays.copyOf是如何复制的。

arraycopy

arraycopy是System提供的native静态方法,方法原型如下;

public static native void arraycopy(Object arg, int arg0, Object arg1, int arg2, int arg3);

参数arg:源数组对象

arg0:源数组的起始位置

arg1:目标数组对象

arg2:目标数组的起始位置

arg3:要复制的元素数量


copyOf

Arrays类中存在着copyOf的很多种实现方式,在进行数组的复制过程中,我们只需要调用其中一种即可,调用方式如下;

Arrays.copyOf(elementData, size);

参数elementData:源数组对象

size:目标数组的长度

来看一下copyOf的源码,如下;

2200c9cdae7d4aa9d90d965dddbbcc8.png


首先,创建了一个和源数组元素相同类型的新数组;

接着调用了System.arraycopy函数,并且在arraycopy函数最后一个参数(要复制的元素数量)取了设置的size源数组长度两者的最小值

最后返回了新数组

目录
相关文章
|
缓存 IDE 安全
基准测试神器JMH —— 详解36个官方例子
基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。而JMH是一个用来构建,运行,分析Java或其他运行在JVM之上的语言的 纳秒/微秒/毫秒/宏观 级别基准测试的工具。
2338 1
基准测试神器JMH —— 详解36个官方例子
|
6月前
|
Arthas 运维 监控
Arthas stack (输出当前方法被调用的调用路径)
Arthas stack (输出当前方法被调用的调用路径)
311 37
|
6月前
|
存储 Prometheus 监控
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
Prometheus 是一款开源的系统监控与报警工具,专为云原生环境设计。它采用拉取模型采集数据,内置高效的本地时序数据库(TSDB),支持丰富的指标类型和四个黄金指标(延迟、流量、错误、饱和度)。其查询语言 PromQL 功能强大,可灵活聚合和分析时间序列数据。此外,通过 Exporter 机制,Prometheus 能轻松扩展到各种系统和服务。针对大规模场景,Thanos 提供高可用解决方案,整合多 Prometheus 实例,实现全局视图和长期存储。整体架构简洁可靠,适用于动态分布式环境。
832 10
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
|
人工智能 监控 数据库
LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅
基于大语言模型的应用在性能、成本、效果等方面存在一系列实际痛点,本文通过分析 LLM 应用模式以及关注点差异来阐明可观测技术挑战,近期阿里云可观测推出了面向 LLM 应用的可观测解决方案以及最佳实践,一起来了解下吧。
20067 126
LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅
|
12月前
|
Linux Shell
linux 查看某个文件夹属于哪个盘
在 Linux 系统中,要查看某个文件夹属于哪个磁盘分区,你可以使用多种方法。以下是几种常见的方法: 方法一:使用 df 命令 df 命令用于显示文件系统的磁盘空间使用情况。 打开终端。 使用以下命令查看文件夹所属的磁盘分区: bash df -h /path/to/your/folder 其中 /path/to/your/folder 是你要查询的文件夹路径。 示例: bash df -h /home/user/Documents 输出将类似于: Filesystem Size Used Avail Use% Mounted on /dev/sda1
1940 1
|
分布式计算 监控 Java
Java的大数据处理与分析技术 (2)
Java的大数据处理与分析技术 (2)
204 2
基于极大似然算法的系统参数辨识matlab仿真
本程序基于极大似然算法实现系统参数辨识,对参数a1、b1、a2、b2进行估计,并计算估计误差及收敛曲线,对比不同信噪比下的误差表现。在MATLAB2022a版本中运行,展示了参数估计值及其误差曲线。极大似然估计方法通过最大化观测数据的似然函数来估计未知参数,适用于多种系统模型。
|
存储 Java
什么情况下会产生StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出)怎么排查
什么情况下会产生StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出)怎么排查
|
SQL 机器学习/深度学习 分布式计算
大数据平台之Spark
Apache Spark 是一个开源的分布式计算系统,主要用于大规模数据处理和分析。它由UC Berkeley AMPLab开发,并由Apache Software Foundation维护。Spark旨在提供比Hadoop MapReduce更快的处理速度和更丰富的功能,特别是在处理迭代算法和交互式数据分析方面。
343 0
|
消息中间件 监控 负载均衡
rabbitmq与kafka的区别
RabbitMQ提供了强大的可靠性保障,通过持久化机制和消息确认机制来确保消息的可靠传输和消费。而Kafka也提供了类似的可靠性保障,但其持久化机制和消息确认机制的实现方式与RabbitMQ有所不同。
794 0