diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java
index 209a089..04b54a8 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java
@@ -27,7 +27,6 @@
 import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.collect.compacthashmap.CompactHashMap;
 import com.google.devtools.build.lib.skyframe.TreeArtifactValue;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -97,7 +96,7 @@
 
     private void put(String name, Object val) {
       // Input path segments are commonly shared among actions, so intern before storing.
-      name = StringCanonicalizer.intern(name);
+      name = name.intern();
 
       switch (subFolders.size()) {
         case 0 -> subFolders = ImmutableMap.of(name, val);
diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java b/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java
index c3204d9..1b98e52 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/cache/PersistentStringIndexer.java
@@ -18,7 +18,6 @@
 import com.google.devtools.build.lib.clock.Clock;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ConditionallyThreadSafe;
 import com.google.devtools.build.lib.util.PersistentMap;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import com.google.devtools.build.lib.util.StringIndexer;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
@@ -88,7 +87,7 @@
     if (i != null) {
       return i;
     }
-    s = StringCanonicalizer.intern(s);
+    s = s.intern();
     synchronized (this) {
       i = stringToInt.size();
       Integer existing = stringToInt.putIfAbsent(s, i);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
index c7c0535..989e64b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
@@ -21,7 +21,6 @@
 import com.google.devtools.build.lib.actions.ArtifactRoot;
 import com.google.devtools.build.lib.actions.ArtifactRoot.RootType;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import com.google.devtools.build.lib.vfs.Path;
 import javax.annotation.Nullable;
 
@@ -251,7 +250,7 @@
    * <p>For example: {@code "bazel-out"}.
    */
   public static String getRelativeOutputPath(String productName) {
-    return StringCanonicalizer.intern(productName + "-out");
+    return (productName + "-out").intern();
   }
 
   public String getProductName() {
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
index b15e953..3747008 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
@@ -22,7 +22,6 @@
 import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.Pair;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import com.google.devtools.build.lib.util.StringUtilities;
 import com.google.devtools.build.lib.vfs.OsPathPolicy;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -61,7 +60,7 @@
           .build(
               name -> {
                 validate(name);
-                return new RepositoryName(StringCanonicalizer.intern(name));
+                return new RepositoryName(name.intern());
               });
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/CallStack.java b/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
index e2ae805..64984ac 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
@@ -18,7 +18,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.HashCodes;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import java.util.List;
 import java.util.Objects;
 import javax.annotation.Nullable;
@@ -65,8 +64,7 @@
         String name, String file, int line, int col, @Nullable Node next) {
       // Use common canonicalizer based on assertion that most strings (function names, locations)
       // were already shared across packages to some degree.
-      return new Node(
-          StringCanonicalizer.intern(name), StringCanonicalizer.intern(file), line, col, next);
+      return new Node(name.intern(), file.intern(), line, col, next);
     }
 
     private Node(String name, Location location, @Nullable Node next) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Type.java b/src/main/java/com/google/devtools/build/lib/packages/Type.java
index 7ccb3e9..8663180 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Type.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Type.java
@@ -24,7 +24,6 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.LoggingUtil;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -255,10 +254,7 @@
   /** The type of a Starlark integer in the signed 32-bit range. */
   @SerializationConstant public static final Type<StarlarkInt> INTEGER = new IntegerType();
 
-  /**
-   * The type of a string which interns the string instance in {@link StringCanonicalizer}'s weak
-   * interner.
-   */
+  /** The type of a string which interns the instance with String#intern. */
   @SerializationConstant
   public static final Type<String> STRING = new StringType(/* internString= */ true);
 
@@ -266,9 +262,8 @@
    * The type of a string which does not intern the string instance.
    *
    * <p>When there is only one string instance created in blaze, interning it introduces memory
-   * overhead of an additional map entry in weak interner's map. So for attribute whose string value
-   * tends to not duplicate (for example rule name), it is preferable not to intern such string
-   * values.
+   * overhead. So for attribute whose string value tends to not duplicate (for example rule name),
+   * it is preferable not to intern such string values.
    */
   @SerializationConstant
   public static final Type<String> STRING_NO_INTERN = new StringType(/* internString= */ false);
@@ -479,7 +474,7 @@
       if (!(x instanceof String)) {
         throw new ConversionException(this, x, what);
       }
-      return internString ? StringCanonicalizer.intern((String) x) : (String) x;
+      return internString ? ((String) x).intern() : (String) x;
     }
 
     @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java
index 1803cdb..f414de7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java
@@ -19,7 +19,6 @@
 import com.google.devtools.build.lib.packages.Globber;
 import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -79,7 +78,7 @@
     this.packageId = Preconditions.checkNotNull(packageId);
     this.packageRoot = Preconditions.checkNotNull(packageRoot);
     this.subdir = Preconditions.checkNotNull(subdir);
-    this.pattern = Preconditions.checkNotNull(StringCanonicalizer.intern(pattern));
+    this.pattern = Preconditions.checkNotNull(pattern.intern());
     this.globberOperation = globberOperation;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
index 166da7c..73b533d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
@@ -21,7 +21,6 @@
 import com.google.devtools.build.lib.packages.AdvertisedProviderSet;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.util.Objects;
@@ -184,7 +183,7 @@
 
     private TransitiveTraversalValueWithError(String errorMessage, String kind) {
       super(kind);
-      this.errorMessage = StringCanonicalizer.intern(Preconditions.checkNotNull(errorMessage));
+      this.errorMessage = Preconditions.checkNotNull(errorMessage).intern();
     }
 
     @Override
diff --git a/src/main/java/com/google/devtools/build/lib/util/BUILD b/src/main/java/com/google/devtools/build/lib/util/BUILD
index e39f8a7..9436ed6 100644
--- a/src/main/java/com/google/devtools/build/lib/util/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/util/BUILD
@@ -312,14 +312,10 @@
 java_library(
     name = "string",
     srcs = [
-        "StringCanonicalizer.java",
         "StringUtil.java",
         "StringUtilities.java",
     ],
-    deps = [
-        "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//third_party:guava",
-    ],
+    deps = ["//third_party:guava"],
 )
 
 java_library(
diff --git a/src/main/java/com/google/devtools/build/lib/util/StringCanonicalizer.java b/src/main/java/com/google/devtools/build/lib/util/StringCanonicalizer.java
deleted file mode 100644
index b294c6d..0000000
--- a/src/main/java/com/google/devtools/build/lib/util/StringCanonicalizer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.util;
-
-/**
- * Just an indirection to {@code String#intern}.
- *
- * <p>TODO: b/335098503 - turn this down if String#intern sticks.
- */
-public final class StringCanonicalizer {
-
-  private StringCanonicalizer() {}
-
-  /** Interns a String. */
-  public static String intern(String arg) {
-    return arg.intern();
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/util/StringCanonicalizerTest.java b/src/test/java/com/google/devtools/build/lib/util/StringCanonicalizerTest.java
deleted file mode 100644
index 6e4d2a6..0000000
--- a/src/test/java/com/google/devtools/build/lib/util/StringCanonicalizerTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.util;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Tests for String canonicalizer.
- */
-@RunWith(JUnit4.class)
-public class StringCanonicalizerTest {
-
-  @Test
-  public void twoDifferentStringsAreDifferent() {
-    String stringA = StringCanonicalizer.intern("A");
-    String stringB = StringCanonicalizer.intern("B");
-    assertThat(stringA).isNotEqualTo(stringB);
-  }
-
-  @Test
-  public void twoSameStringsAreCanonicalized() {
-    String stringA1 = StringCanonicalizer.intern(new String("A"));
-    String stringA2 = StringCanonicalizer.intern(new String("A"));
-    assertThat(stringA2).isSameInstanceAs(stringA1);
-  }
-}
