Intern IntVersions.

--
MOS_MIGRATED_REVID=113197641
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
index 78a4e1d..87e1a47 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
@@ -124,7 +124,7 @@
   @Override
   public void deleteDirty(long versionAgeLimit) {
     Preconditions.checkArgument(versionAgeLimit >= 0);
-    final Version threshold = new IntVersion(lastGraphVersion.getVal() - versionAgeLimit);
+    final Version threshold = IntVersion.of(lastGraphVersion.getVal() - versionAgeLimit);
     valuesToDelete.addAll(
         Sets.filter(dirtyKeyTracker.getDirtyKeys(), new Predicate<SkyKey>() {
           @Override
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
index 0cee74c..c23b822 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -329,7 +329,7 @@
 
   @Override
   public synchronized boolean signalDep() {
-    return signalDep(/*childVersion=*/new IntVersion(Long.MAX_VALUE));
+    return signalDep(/*childVersion=*/ IntVersion.of(Long.MAX_VALUE));
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
index 38b2d71..cfb3484 100644
--- a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
+++ b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
@@ -13,16 +13,20 @@
 // limitations under the License.
 package com.google.devtools.build.skyframe;
 
+import com.google.common.collect.Interner;
+import com.google.common.collect.Interners;
+
 import java.io.Serializable;
 
 /**
  * Versioning scheme based on integers.
  */
 public final class IntVersion implements Version, Serializable {
+  private static final Interner<IntVersion> interner = Interners.newWeakInterner();
 
   private final long val;
 
-  public IntVersion(long val) {
+  private IntVersion(long val) {
     this.val = val;
   }
 
@@ -31,11 +35,15 @@
   }
 
   public IntVersion next() {
-    return new IntVersion(val + 1);
+    return of(val + 1);
   }
 
   public IntVersion previous() {
-    return new IntVersion(val - 1);
+    return of(val - 1);
+  }
+
+  public static IntVersion of(long val) {
+    return interner.intern(new IntVersion(val));
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
index 99e2ef0..886c40a 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
@@ -28,7 +28,7 @@
 
   public SequentialBuildDriver(MemoizingEvaluator evaluator) {
     this.memoizingEvaluator = Preconditions.checkNotNull(evaluator);
-    this.curVersion = new IntVersion(0);
+    this.curVersion = IntVersion.of(0);
   }
 
   @Override