diff --git a/core-java-modules/core-java-arrays-operations-advanced/pom.xml b/core-java-modules/core-java-arrays-operations-advanced/pom.xml
index 5663a7d1ca..065f1930e2 100644
--- a/core-java-modules/core-java-arrays-operations-advanced/pom.xml
+++ b/core-java-modules/core-java-arrays-operations-advanced/pom.xml
@@ -26,10 +26,50 @@
${assertj-core.version}
test
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh.version}
+
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh.version}
+
3.10.0
+ 1.33
+
+
+
+ maven-assembly-plugin
+
+
+ jar-with-dependencies
+
+
+
+ com.baeldung.copyarraymethodsperformance.BenchmarkRunner
+
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java
new file mode 100644
index 0000000000..0adbcc1986
--- /dev/null
+++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java
@@ -0,0 +1,11 @@
+package com.baeldung.copyarraymethodsperformance;
+
+public class BenchmarkRunner {
+
+ public static void main(String[] args) throws Exception {
+
+ org.openjdk.jmh.Main.main(args);
+
+ }
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java
new file mode 100644
index 0000000000..6a492bf0d1
--- /dev/null
+++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java
@@ -0,0 +1,42 @@
+package com.baeldung.copyarraymethodsperformance;
+
+import org.openjdk.jmh.annotations.*;
+
+import java.util.Arrays;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@State(Scope.Thread)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@Warmup(iterations = 10)
+@Fork(1)
+@Measurement(iterations = 100)
+public class ObjectsCopyBenchmark {
+
+ @Param({ "10", "1000000" })
+ public int SIZE;
+ Integer[] src;
+
+ @Setup
+ public void setup() {
+ Random r = new Random();
+ src = new Integer[SIZE];
+
+ for (int i = 0; i < SIZE; i++) {
+ src[i] = r.nextInt();
+ }
+ }
+
+ @Benchmark
+ public Integer[] systemArrayCopyBenchmark() {
+ Integer[] target = new Integer[SIZE];
+ System.arraycopy(src, 0, target, 0, SIZE);
+ return target;
+ }
+
+ @Benchmark
+ public Integer[] arraysCopyOfBenchmark() {
+ return Arrays.copyOf(src, SIZE);
+ }
+}
diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java
new file mode 100644
index 0000000000..767e91a350
--- /dev/null
+++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java
@@ -0,0 +1,43 @@
+package com.baeldung.copyarraymethodsperformance;
+
+import org.openjdk.jmh.annotations.*;
+
+import java.util.Arrays;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@State(Scope.Thread)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@Warmup(iterations = 10)
+@Fork(1)
+@Measurement(iterations = 100)
+public class PrimitivesCopyBenchmark {
+
+ @Param({ "10", "1000000" })
+ public int SIZE;
+
+ int[] src;
+
+ @Setup
+ public void setup() {
+ Random r = new Random();
+ src = new int[SIZE];
+
+ for (int i = 0; i < SIZE; i++) {
+ src[i] = r.nextInt();
+ }
+ }
+
+ @Benchmark
+ public int[] systemArrayCopyBenchmark() {
+ int[] target = new int[SIZE];
+ System.arraycopy(src, 0, target, 0, SIZE);
+ return target;
+ }
+
+ @Benchmark
+ public int[] arraysCopyOfBenchmark() {
+ return Arrays.copyOf(src, SIZE);
+ }
+}