diff --git a/lang/java/avro/src/main/java/org/apache/avro/util/Utf8.java b/lang/java/avro/src/main/java/org/apache/avro/util/Utf8.java
index 9238fd78c65..6de9ebb22c5 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/util/Utf8.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/util/Utf8.java
@@ -158,6 +158,10 @@ public boolean equals(Object o) {
     Utf8 that = (Utf8) o;
     if (!(this.length == that.length))
       return false;
+    // For longer strings, leverage vectorization (JDK 9+) to determine equality
+    // For shorter strings, the overhead of this method defeats the value
+    if (this.length > 7)
+      return Arrays.equals(this.bytes, 0, this.length, that.bytes, 0, that.length);
     byte[] thatBytes = that.bytes;
     for (int i = 0; i < this.length; i++)
       if (bytes[i] != thatBytes[i])