diff --git a/dexlayout/dexlayout.cc b/dexlayout/dexlayout.cc
index 7382a97..f5eeeb7 100644
--- a/dexlayout/dexlayout.cc
+++ b/dexlayout/dexlayout.cc
@@ -28,6 +28,7 @@
 #include <iostream>
 #include <memory>
 #include <sstream>
+#include <unordered_set>
 #include <vector>
 
 #include "android-base/stringprintf.h"
diff --git a/libdexfile/dex/dex_cache_resolved_classes.h b/libdexfile/dex/dex_cache_resolved_classes.h
deleted file mode 100644
index 4c9acbf..0000000
--- a/libdexfile/dex/dex_cache_resolved_classes.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#ifndef ART_LIBDEXFILE_DEX_DEX_CACHE_RESOLVED_CLASSES_H_
-#define ART_LIBDEXFILE_DEX_DEX_CACHE_RESOLVED_CLASSES_H_
-
-#include <string>
-#include <unordered_set>
-#include <vector>
-
-#include "dex/dex_file_types.h"
-
-namespace art {
-
-// Data structure for passing around which classes belonging to a dex cache / dex file are resolved.
-class DexCacheResolvedClasses {
- public:
-  DexCacheResolvedClasses(const std::string& dex_location,
-                          const std::string& base_location,
-                          uint32_t location_checksum,
-                          uint32_t num_method_ids)
-      : dex_location_(dex_location),
-        base_location_(base_location),
-        location_checksum_(location_checksum),
-        num_method_ids_(num_method_ids) {}
-
-  // Only compare the key elements, ignore the resolved classes.
-  int Compare(const DexCacheResolvedClasses& other) const {
-    if (location_checksum_ != other.location_checksum_) {
-      return static_cast<int>(location_checksum_ - other.location_checksum_);
-    }
-    // Don't need to compare base_location_ since dex_location_ has more info.
-    return dex_location_.compare(other.dex_location_);
-  }
-
-  bool AddClass(dex::TypeIndex index) const {
-    return classes_.insert(index).second;
-  }
-
-  template <class InputIt>
-  void AddClasses(InputIt begin, InputIt end) const {
-    classes_.insert(begin, end);
-  }
-
-  const std::string& GetDexLocation() const {
-    return dex_location_;
-  }
-
-  const std::string& GetBaseLocation() const {
-    return base_location_;
-  }
-
-  uint32_t GetLocationChecksum() const {
-    return location_checksum_;
-  }
-
-  const std::unordered_set<dex::TypeIndex>& GetClasses() const {
-    return classes_;
-  }
-
-  size_t NumMethodIds() const {
-    return num_method_ids_;
-  }
-
- private:
-  const std::string dex_location_;
-  const std::string base_location_;
-  const uint32_t location_checksum_;
-  const uint32_t num_method_ids_;
-  // Array of resolved class def indexes.
-  mutable std::unordered_set<dex::TypeIndex> classes_;
-};
-
-inline bool operator<(const DexCacheResolvedClasses& a, const DexCacheResolvedClasses& b) {
-  return a.Compare(b) < 0;
-}
-
-}  // namespace art
-
-#endif  // ART_LIBDEXFILE_DEX_DEX_CACHE_RESOLVED_CLASSES_H_
diff --git a/libprofile/profile/profile_compilation_info.h b/libprofile/profile/profile_compilation_info.h
index 5fe9fa6..fa70e8b 100644
--- a/libprofile/profile/profile_compilation_info.h
+++ b/libprofile/profile/profile_compilation_info.h
@@ -28,7 +28,6 @@
 #include "base/malloc_arena_pool.h"
 #include "base/mem_map.h"
 #include "base/safe_map.h"
-#include "dex/dex_cache_resolved_classes.h"
 #include "dex/dex_file.h"
 #include "dex/dex_file_types.h"
 #include "dex/method_reference.h"
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index d14dd01..81fa614 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -9782,99 +9782,6 @@
   }
 }
 
-class GetResolvedClassesVisitor : public ClassVisitor {
- public:
-  GetResolvedClassesVisitor(std::set<DexCacheResolvedClasses>* result, bool ignore_boot_classes)
-      : result_(result),
-        ignore_boot_classes_(ignore_boot_classes),
-        last_resolved_classes_(result->end()),
-        last_dex_file_(nullptr),
-        vlog_is_on_(VLOG_IS_ON(class_linker)),
-        extra_stats_(),
-        last_extra_stats_(extra_stats_.end()) { }
-
-  bool operator()(ObjPtr<mirror::Class> klass) override REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (!klass->IsProxyClass() &&
-        !klass->IsArrayClass() &&
-        klass->IsResolved() &&
-        !klass->IsErroneousResolved() &&
-        (!ignore_boot_classes_ || klass->GetClassLoader() != nullptr)) {
-      const DexFile& dex_file = klass->GetDexFile();
-      if (&dex_file != last_dex_file_) {
-        last_dex_file_ = &dex_file;
-        DexCacheResolvedClasses resolved_classes(
-            dex_file.GetLocation(),
-            DexFileLoader::GetBaseLocation(dex_file.GetLocation()),
-            dex_file.GetLocationChecksum(),
-            dex_file.NumMethodIds());
-        last_resolved_classes_ = result_->find(resolved_classes);
-        if (last_resolved_classes_ == result_->end()) {
-          last_resolved_classes_ = result_->insert(resolved_classes).first;
-        }
-      }
-      bool added = last_resolved_classes_->AddClass(klass->GetDexTypeIndex());
-      if (UNLIKELY(vlog_is_on_) && added) {
-        const DexCacheResolvedClasses* resolved_classes = std::addressof(*last_resolved_classes_);
-        if (last_extra_stats_ == extra_stats_.end() ||
-            last_extra_stats_->first != resolved_classes) {
-          last_extra_stats_ = extra_stats_.find(resolved_classes);
-          if (last_extra_stats_ == extra_stats_.end()) {
-            last_extra_stats_ =
-                extra_stats_.emplace(resolved_classes, ExtraStats(dex_file.NumClassDefs())).first;
-          }
-        }
-      }
-    }
-    return true;
-  }
-
-  void PrintStatistics() const {
-    if (vlog_is_on_) {
-      for (const DexCacheResolvedClasses& resolved_classes : *result_) {
-        auto it = extra_stats_.find(std::addressof(resolved_classes));
-        DCHECK(it != extra_stats_.end());
-        const ExtraStats& extra_stats = it->second;
-        LOG(INFO) << "Dex location " << resolved_classes.GetDexLocation()
-                  << " has " << resolved_classes.GetClasses().size() << " / "
-                  << extra_stats.number_of_class_defs_ << " resolved classes";
-      }
-    }
-  }
-
- private:
-  struct ExtraStats {
-    explicit ExtraStats(uint32_t number_of_class_defs)
-        : number_of_class_defs_(number_of_class_defs) {}
-    uint32_t number_of_class_defs_;
-  };
-
-  std::set<DexCacheResolvedClasses>* result_;
-  bool ignore_boot_classes_;
-  std::set<DexCacheResolvedClasses>::iterator last_resolved_classes_;
-  const DexFile* last_dex_file_;
-
-  // Statistics.
-  bool vlog_is_on_;
-  std::map<const DexCacheResolvedClasses*, ExtraStats> extra_stats_;
-  std::map<const DexCacheResolvedClasses*, ExtraStats>::iterator last_extra_stats_;
-};
-
-std::set<DexCacheResolvedClasses> ClassLinker::GetResolvedClasses(bool ignore_boot_classes) {
-  ScopedTrace trace(__PRETTY_FUNCTION__);
-  ScopedObjectAccess soa(Thread::Current());
-  ScopedAssertNoThreadSuspension ants(__FUNCTION__);
-  std::set<DexCacheResolvedClasses> ret;
-  VLOG(class_linker) << "Collecting resolved classes";
-  const uint64_t start_time = NanoTime();
-  GetResolvedClassesVisitor visitor(&ret, ignore_boot_classes);
-  VisitClasses(&visitor);
-  if (VLOG_IS_ON(class_linker)) {
-    visitor.PrintStatistics();
-    LOG(INFO) << "Collecting class profile took " << PrettyDuration(NanoTime() - start_time);
-  }
-  return ret;
-}
-
 class ClassLinker::FindVirtualMethodHolderVisitor : public ClassVisitor {
  public:
   FindVirtualMethodHolderVisitor(const ArtMethod* method, PointerSize pointer_size)
diff --git a/runtime/class_linker.h b/runtime/class_linker.h
index f993d17..23ebf0a 100644
--- a/runtime/class_linker.h
+++ b/runtime/class_linker.h
@@ -32,7 +32,6 @@
 #include "base/locks.h"
 #include "base/macros.h"
 #include "dex/class_accessor.h"
-#include "dex/dex_cache_resolved_classes.h"
 #include "dex/dex_file_types.h"
 #include "gc_root.h"
 #include "handle.h"
@@ -697,9 +696,6 @@
   static bool ShouldUseInterpreterEntrypoint(ArtMethod* method, const void* quick_code)
       REQUIRES_SHARED(Locks::mutator_lock_);
 
-  std::set<DexCacheResolvedClasses> GetResolvedClasses(bool ignore_boot_classes)
-      REQUIRES(!Locks::dex_lock_);
-
   static bool IsBootClassLoader(ScopedObjectAccessAlreadyRunnable& soa,
                                 ObjPtr<mirror::ClassLoader> class_loader)
       REQUIRES_SHARED(Locks::mutator_lock_);
diff --git a/runtime/jit/profile_saver.cc b/runtime/jit/profile_saver.cc
index be52051..fe551f3b 100644
--- a/runtime/jit/profile_saver.cc
+++ b/runtime/jit/profile_saver.cc
@@ -98,7 +98,6 @@
       total_number_of_failed_writes_(0),
       total_ms_of_sleep_(0),
       total_ns_of_work_(0),
-      max_number_of_profile_entries_cached_(0),
       total_number_of_hot_spikes_(0),
       total_number_of_wake_ups_(0),
       options_(options) {
@@ -439,10 +438,8 @@
                                   &hot_methods,
                                   &sampled_methods);
   MutexLock mu(self, *Locks::profiler_lock_);
-  uint64_t total_number_of_profile_entries_cached = 0;
 
   for (const auto& it : tracked_dex_base_locations_) {
-    std::set<DexCacheResolvedClasses> resolved_classes_for_location;
     const std::string& filename = it.first;
     auto info_it = profile_cache_.find(filename);
     if (info_it == profile_cache_.end()) {
@@ -507,11 +504,7 @@
         VLOG(profiler) << "Location not found " << base_location;
       }
     }
-    total_number_of_profile_entries_cached += resolved_classes_for_location.size();
   }
-  max_number_of_profile_entries_cached_ = std::max(
-      max_number_of_profile_entries_cached_,
-      total_number_of_profile_entries_cached);
   VLOG(profiler) << "Profile saver recorded " << hot_methods.NumReferences() << " hot methods and "
                  << sampled_methods.NumReferences() << " sampled methods with threshold "
                  << hot_method_sample_threshold << " in "
@@ -913,8 +906,6 @@
      << "ProfileSaver total_number_of_failed_writes=" << total_number_of_failed_writes_ << '\n'
      << "ProfileSaver total_ms_of_sleep=" << total_ms_of_sleep_ << '\n'
      << "ProfileSaver total_ms_of_work=" << NsToMs(total_ns_of_work_) << '\n'
-     << "ProfileSaver max_number_profile_entries_cached="
-     << max_number_of_profile_entries_cached_ << '\n'
      << "ProfileSaver total_number_of_hot_spikes=" << total_number_of_hot_spikes_ << '\n'
      << "ProfileSaver total_number_of_wake_ups=" << total_number_of_wake_ups_ << '\n';
 }
diff --git a/runtime/jit/profile_saver.h b/runtime/jit/profile_saver.h
index ed0ba9f..60959d2 100644
--- a/runtime/jit/profile_saver.h
+++ b/runtime/jit/profile_saver.h
@@ -150,7 +150,6 @@
   uint64_t total_ms_of_sleep_;
   uint64_t total_ns_of_work_;
   // TODO(calin): replace with an actual size.
-  uint64_t max_number_of_profile_entries_cached_;
   uint64_t total_number_of_hot_spikes_;
   uint64_t total_number_of_wake_ups_;
 
