Get rid of boolean field in InMemoryNodeEntry. After adding the lastEvaluated/lastChanged version fields, we lost memory alignment, so this boolean was costing us 8 bytes per instance.

--
MOS_MIGRATED_REVID=125998857
diff --git a/src/main/java/com/google/devtools/build/skyframe/BuildingState.java b/src/main/java/com/google/devtools/build/skyframe/BuildingState.java
index b20f7e8..6969f28 100644
--- a/src/main/java/com/google/devtools/build/skyframe/BuildingState.java
+++ b/src/main/java/com/google/devtools/build/skyframe/BuildingState.java
@@ -114,12 +114,8 @@
    * Upon building, these reverse deps will be signaled and then stored in the permanent
    * {@code ValueEntry#reverseDeps}.
    */
-  // TODO(bazel-team): Remove this field. With eager invalidation, all direct deps on this dirty
-  // node will be removed by the time evaluation starts, so reverse deps to signal can just be
-  // reverse deps in the main ValueEntry object.
   private Object reverseDepsToSignal = ImmutableList.of();
   private List<Object> reverseDepsDataToConsolidate = null;
-  private boolean reverseDepIsSingleObject = false;
 
   private static final ReverseDepsUtil<BuildingState> REVERSE_DEPS_UTIL =
       new ReverseDepsUtilImpl<BuildingState>() {
@@ -129,11 +125,6 @@
         }
 
         @Override
-        void setSingleReverseDep(BuildingState container, boolean singleObject) {
-          container.reverseDepIsSingleObject = singleObject;
-        }
-
-        @Override
         void setDataToConsolidate(BuildingState container, List<Object> dataToConsolidate) {
           container.reverseDepsDataToConsolidate = dataToConsolidate;
         }
@@ -144,11 +135,6 @@
         }
 
         @Override
-        boolean isSingleReverseDep(BuildingState container) {
-          return container.reverseDepIsSingleObject;
-        }
-
-        @Override
         List<Object> getDataToConsolidate(BuildingState container) {
           return container.reverseDepsDataToConsolidate;
         }
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 414525e..a886e26 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -87,12 +87,6 @@
   protected Object reverseDeps = ImmutableList.of();
 
   /**
-   * We take advantage of memory alignment to avoid doing a nasty {@code instanceof} for knowing
-   * if {@code reverseDeps} is a single object or a list.
-   */
-  protected boolean reverseDepIsSingleObject = false;
-
-  /**
    * When reverse deps are removed, checked for presence, or possibly added, we store them in this
    * object instead of directly doing the operation. That is because removals/checks in reverseDeps
    * are O(N). Originally reverseDeps was a HashSet, but because of memory consumption we switched
@@ -104,7 +98,7 @@
    */
   private List<Object> reverseDepsDataToConsolidate = null;
 
-  protected static final ReverseDepsUtil<InMemoryNodeEntry> REVERSE_DEPS_UTIL =
+  private static final ReverseDepsUtil<InMemoryNodeEntry> REVERSE_DEPS_UTIL =
       new ReverseDepsUtilImpl<InMemoryNodeEntry>() {
         @Override
         void setReverseDepsObject(InMemoryNodeEntry container, Object object) {
@@ -112,11 +106,6 @@
         }
 
         @Override
-        void setSingleReverseDep(InMemoryNodeEntry container, boolean singleObject) {
-          container.reverseDepIsSingleObject = singleObject;
-        }
-
-        @Override
         void setDataToConsolidate(InMemoryNodeEntry container, List<Object> dataToConsolidate) {
           container.reverseDepsDataToConsolidate = dataToConsolidate;
         }
@@ -127,11 +116,6 @@
         }
 
         @Override
-        boolean isSingleReverseDep(InMemoryNodeEntry container) {
-          return container.reverseDepIsSingleObject;
-        }
-
-        @Override
         List<Object> getDataToConsolidate(InMemoryNodeEntry container) {
           return container.reverseDepsDataToConsolidate;
         }
diff --git a/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java b/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java
index 0272ab2..73c179d 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java
@@ -50,14 +50,10 @@
 
   abstract void setReverseDepsObject(T container, Object object);
 
-  abstract void setSingleReverseDep(T container, boolean singleObject);
-
   abstract void setDataToConsolidate(T container, @Nullable List<Object> dataToConsolidate);
 
   abstract Object getReverseDepsObject(T container);
 
-  abstract boolean isSingleReverseDep(T container);
-
   abstract List<Object> getDataToConsolidate(T container);
 
   private enum ConsolidateOp {
@@ -173,6 +169,10 @@
     }
   }
 
+  private boolean isSingleReverseDep(T container) {
+    return !(getReverseDepsObject(container) instanceof List);
+  }
+
   /**
    *  We only check if reverse deps is small and there are no delayed data to consolidate, since
    *  then presence or absence would not be known.
@@ -389,11 +389,9 @@
 
   private void overwriteReverseDepsWithObject(T container, SkyKey newObject) {
     setReverseDepsObject(container, newObject);
-    setSingleReverseDep(container, true);
   }
 
   private void overwriteReverseDepsList(T container, List<SkyKey> list) {
     setReverseDepsObject(container, list);
-    setSingleReverseDep(container, false);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java b/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java
index 7c5e476..92e0906 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java
@@ -57,11 +57,6 @@
         }
 
         @Override
-        void setSingleReverseDep(Example container, boolean singleObject) {
-          container.single = singleObject;
-        }
-
-        @Override
         void setDataToConsolidate(Example container, List<Object> dataToConsolidate) {
           container.dataToConsolidate = dataToConsolidate;
         }
@@ -72,11 +67,6 @@
         }
 
         @Override
-        boolean isSingleReverseDep(Example container) {
-          return container.single;
-        }
-
-        @Override
         List<Object> getDataToConsolidate(Example container) {
           return container.dataToConsolidate;
         }