diff --git a/core/lib/Drupal/Component/ClassLoader/ApcClassLoader.php b/core/lib/Drupal/Component/ClassLoader/ApcClassLoader.php
new file mode 100644
index 0000000000..56a62b88be
--- /dev/null
+++ b/core/lib/Drupal/Component/ClassLoader/ApcClassLoader.php
@@ -0,0 +1,138 @@
+<?php
+
+namespace Drupal\Component\ClassLoader;
+
+/**
+ * Provides a classloader which uses a single APCU entry.
+ */
+class ApcClassLoader {
+
+  /**
+   * The prefix used for the APCU cache entry.
+   *
+   * @var string
+   */
+  protected $prefix;
+
+  /**
+   * A class loader object that implements the findFile() method.
+   *
+   * @var object
+   */
+  protected $decorated;
+
+  /**
+   * A map between classname and filename containing this class.
+   *
+   * @var string[]
+   */
+  protected $classmap = [];
+
+  /**
+   * A flag to whether the data should be written to disc.
+   *
+   * @var bool
+   */
+  protected $writeClassMap = FALSE;
+
+  /**
+   * Constructor.
+   *
+   * @param string $prefix
+   *   The APC namespace prefix to use.
+   * @param object
+   *   $decorated A class loader object that implements the  findFile() method.
+   *
+   * @throws \RuntimeException
+   * @throws \InvalidArgumentException
+   */
+  public function __construct($prefix, $decorated) {
+    if (!function_exists('apcu_fetch')) {
+      throw new \RuntimeException('Unable to use ApcClassLoader as APC is not installed.');
+    }
+
+    if (!method_exists($decorated, 'findFile')) {
+      throw new \InvalidArgumentException('The class finder must implement a "findFile" method.');
+    }
+
+    $this->prefix = $prefix;
+    $this->decorated = $decorated;
+  }
+
+  /**
+   * Registers this instance as an autoloader.
+   *
+   * @param bool $prepend Whether to prepend the autoloader or not
+   */
+  public function register($prepend = FALSE) {
+    spl_autoload_register([$this, 'loadClass'], TRUE, $prepend);
+  }
+
+  /**
+   * Unregisters this instance as an autoloader.
+   */
+  public function unregister() {
+    spl_autoload_unregister([$this, 'loadClass']);
+  }
+
+  /**
+   * Loads the given class or interface.
+   *
+   * @param string $class The name of the class
+   *
+   * @return bool|null True, if loaded
+   */
+  public function loadClass($class) {
+    if ($file = $this->findFile($class)) {
+      require $file;
+
+      return true;
+    }
+  }
+
+  /**
+   * Finds a file by class name while caching lookups to APC.
+   *
+   * @param string $class A class name to resolve to file
+   *
+   * @return string|null
+   */
+  public function findFile($class) {
+    if (!empty($this->classmap[$class])) {
+      return $this->classmap[$class];
+    }
+    elseif (!isset($this->classmap) && $data = apcu_fetch($this->prefix)) {
+      $this->classmap = $data;
+    }
+    else {
+      $this->classmap[$class] = $this->decorated->findFile($class);
+      $this->writeClassMap = TRUE;
+    }
+
+    return $this->classmap[$class];
+  }
+
+  /**
+   * Passes through all unknown calls onto the decorated object.
+   */
+  public function __call($method, $args) {
+    return call_user_func_array([$this->decorated, $method], $args);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __destruct() {
+    if ($this->writeClassMap) {
+      // A different request might have loaded different classes, so let's merge
+      // the data to improve efficiency.
+      if ($previous_classmap = apcu_fetch($this->prefix)) {
+        $class_map = array_merge($this->classmap, $previous_classmap);
+        if ($class_map != $previous_classmap) {
+          apcu_store($this->prefix, $this->classmap);
+        }
+      }
+    }
+  }
+
+}
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 37ed0e97a6..905261d459 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -4,6 +4,7 @@
 
 use Composer\Autoload\ClassLoader;
 use Drupal\Component\Assertion\Handle;
+use Drupal\Component\ClassLoader\ApcClassLoader;
 use Drupal\Component\FileCache\FileCacheFactory;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Component\Utility\UrlHelper;
@@ -23,7 +24,6 @@
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Test\TestDatabase;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
-use Symfony\Component\ClassLoader\ApcClassLoader;
 use Symfony\Component\ClassLoader\WinCacheClassLoader;
 use Symfony\Component\ClassLoader\XcacheClassLoader;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -249,7 +249,7 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
    * @param $class_loader
    *   The class loader. Normally Composer's ClassLoader, as included by the
    *   front controller, but may also be decorated; e.g.,
-   *   \Symfony\Component\ClassLoader\ApcClassLoader.
+   *   \Drupal\Component\ClassLoader\ApcClassLoader.
    * @param string $environment
    *   String indicating the environment, e.g. 'prod' or 'dev'.
    * @param bool $allow_dumping
@@ -279,7 +279,7 @@ public static function createFromRequest(Request $request, $class_loader, $envir
    * @param $class_loader
    *   The class loader. Normally \Composer\Autoload\ClassLoader, as included by
    *   the front controller, but may also be decorated; e.g.,
-   *   \Symfony\Component\ClassLoader\ApcClassLoader.
+   *   \Drupal\Component\ClassLoader\ApcClassLoader.
    * @param bool $allow_dumping
    *   (optional) FALSE to stop the container from being written to or read
    *   from disk. Defaults to TRUE.
diff --git a/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php b/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php
index 9ca4ffff85..114742c32a 100644
--- a/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php
+++ b/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php
@@ -2,10 +2,10 @@
 
 namespace Drupal\Tests\Core\DrupalKernel {
 
+  use Drupal\Component\ClassLoader\ApcClassLoader;
   use Drupal\Core\DrupalKernel;
   use Drupal\Tests\UnitTestCase;
   use org\bovigo\vfs\vfsStream;
-  use Symfony\Component\ClassLoader\ApcClassLoader;
   use Symfony\Component\HttpFoundation\Request;
 
   /**
