diff -u b/core/modules/system/system.module b/core/modules/system/system.module
--- b/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -854,12 +854,27 @@
 function system_get_info($type, $name = NULL) {
   $info = array();
   if ($type == 'module') {
-    if (!$data = \Drupal::state()->get('system.module.data')) {
-      $data = system_rebuild_module_data();
+    static $drupal_static_fast;
+    if (!isset($drupal_static_fast)) {
+      $drupal_static_fast = &drupal_static(__FUNCTION__);
     }
-    foreach (\Drupal::moduleHandler()->getModuleList() as $module => $filename) {
-      if (isset($data[$module])) {
-        $info[$module] = $data[$module]->info;
+    $info = &$drupal_static_fast;
+    if (!isset($info)) {
+      if ($cache = \Drupal::cache()->get('system.module.info')) {
+        $info = $cache->data;
+      }
+      else {
+        $data = system_rebuild_module_data();
+        foreach (\Drupal::moduleHandler()->getModuleList() as $module => $filename) {
+          if (isset($data[$module])) {
+            $info[$module] = $data[$module]->info;
+          }
+        }
+        // Store the module info in cache. We rely on consecutive calls to
+        // system_rebuild_module_data() to reset this key, such as when
+        // listing modules, (un)installating modules, importing configuration,
+        // updating the site and when flushing all caches.
+        \Drupal::cache()->set('system.module.info', $info);
       }
     }
   }
@@ -999,16 +1014,14 @@
       $files[$name] = $module->getPathname();
     }
     $modules = \Drupal::moduleHandler()->buildModuleDependencies($modules);
-    // Store the module info in state. We rely on consecutive calls to
-    // system_rebuild_module_data() to reset this key, such as when
-    // listing modules, (un)installating modules, importing configuration,
-    // updating the site and when flushing all caches.
-    \Drupal::state()->set('system.module.data', $modules);
     $modules_cache = $modules;
 
     // Store filenames to allow drupal_get_filename() to
     // retrieve them without having to rebuild or scan the filesystem.
     \Drupal::state()->set('system.module.files', $files);
+    // Clear the module info cache.
+    \Drupal::cache()->delete('system.module.info');
+    drupal_static_reset('system_get_info');
   }
   return $modules_cache;
 }
only in patch2:
unchanged:
--- a/core/modules/user/src/PermissionHandler.php
+++ b/core/modules/user/src/PermissionHandler.php
@@ -227,9 +227,8 @@ protected function sortPermissions(array $all_permissions = array()) {
    */
   protected function getModuleNames() {
     $modules = array();
-    $module_info = $this->systemRebuildModuleData();
     foreach (array_keys($this->moduleHandler->getModuleList()) as $module) {
-      $modules[$module] = $module_info[$module]->info['name'];
+      $modules[$module] = $this->moduleHandler->getName($module);
     }
     asort($modules);
     return $modules;
