diff --git a/core/lib/Drupal/Component/ClassLoader/ApcClassLoader.php b/core/lib/Drupal/Component/ClassLoader/ApcClassLoader.php
new file mode 100644
index 0000000..7664ee5
--- /dev/null
+++ b/core/lib/Drupal/Component/ClassLoader/ApcClassLoader.php
@@ -0,0 +1,131 @@
+<?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 $data = [];
+
+  /**
+   * A flag to whether the data should be written to disc.
+   *
+   * @var bool
+   */
+  protected $writeData = 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->data[$class])) {
+      return $this->data[$class];
+    }
+    elseif (!isset($this->data) && $data = apcu_fetch($this->prefix)) {
+      $this->data = $data;
+    }
+    else {
+      $this->data[$class] = $this->decorated->findFile($class);
+      $this->writeData = TRUE;
+    }
+
+    return $this->data[$class];
+  }
+
+  /**
+   * Passes through all unknown calls onto the decorated object.
+   */
+  public function __call($method, $args) {
+    return call_user_func_array(array($this->decorated, $method), $args);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __destruct() {
+    if ($this->writeData) {
+      apcu_store($this->prefix, $this->data);
+    }
+  }
+
+}
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 3ccb2d7..439b81c 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -3,6 +3,7 @@
 namespace Drupal\Core;
 
 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;
@@ -19,7 +20,6 @@
 use Drupal\Core\Language\Language;
 use Drupal\Core\Site\Settings;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
-use Symfony\Component\ClassLoader\ApcClassLoader;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
 use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -242,7 +242,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
@@ -272,7 +272,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.
