diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index c52cbe2..1b3e987 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -21,7 +21,6 @@
 #include "core/fpdfapi/page/cpdf_function.h"
 #include "core/fpdfapi/page/cpdf_iccprofile.h"
 #include "core/fpdfapi/page/cpdf_indexedcs.h"
-#include "core/fpdfapi/page/cpdf_pagemodule.h"
 #include "core/fpdfapi/page/cpdf_pattern.h"
 #include "core/fpdfapi/page/cpdf_patterncs.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
@@ -424,6 +423,47 @@
   *B = RGB_Conversion(RGB.c);
 }
 
+class StockColorSpaces {
+ public:
+  StockColorSpaces()
+      : gray_(pdfium::MakeRetain<CPDF_DeviceCS>(
+            CPDF_ColorSpace::Family::kDeviceGray)),
+        rgb_(pdfium::MakeRetain<CPDF_DeviceCS>(
+            CPDF_ColorSpace::Family::kDeviceRGB)),
+        cmyk_(pdfium::MakeRetain<CPDF_DeviceCS>(
+            CPDF_ColorSpace::Family::kDeviceCMYK)),
+        pattern_(pdfium::MakeRetain<CPDF_PatternCS>()) {
+    pattern_->InitializeStockPattern();
+  }
+  StockColorSpaces(const StockColorSpaces&) = delete;
+  StockColorSpaces& operator=(const StockColorSpaces&) = delete;
+  ~StockColorSpaces() = default;
+
+  RetainPtr<CPDF_ColorSpace> GetStockCS(CPDF_ColorSpace::Family family) {
+    if (family == CPDF_ColorSpace::Family::kDeviceGray) {
+      return gray_;
+    }
+    if (family == CPDF_ColorSpace::Family::kDeviceRGB) {
+      return rgb_;
+    }
+    if (family == CPDF_ColorSpace::Family::kDeviceCMYK) {
+      return cmyk_;
+    }
+    if (family == CPDF_ColorSpace::Family::kPattern) {
+      return pattern_;
+    }
+    NOTREACHED_NORETURN();
+  }
+
+ private:
+  RetainPtr<CPDF_DeviceCS> gray_;
+  RetainPtr<CPDF_DeviceCS> rgb_;
+  RetainPtr<CPDF_DeviceCS> cmyk_;
+  RetainPtr<CPDF_PatternCS> pattern_;
+};
+
+StockColorSpaces* g_stock_colorspaces = nullptr;
+
 }  // namespace
 
 PatternValue::PatternValue() = default;
@@ -437,6 +477,23 @@
 }
 
 // static
+void CPDF_ColorSpace::InitializeGlobals() {
+  CHECK(!g_stock_colorspaces);
+  g_stock_colorspaces = new StockColorSpaces();
+}
+
+// static
+void CPDF_ColorSpace::DestroyGlobals() {
+  delete g_stock_colorspaces;
+  g_stock_colorspaces = nullptr;
+}
+
+// static
+RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::GetStockCS(Family family) {
+  return g_stock_colorspaces->GetStockCS(family);
+}
+
+// static
 RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::GetStockCSForName(
     const ByteString& name) {
   if (name == "DeviceRGB" || name == "RGB")
@@ -451,11 +508,6 @@
 }
 
 // static
-RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::GetStockCS(Family family) {
-  return CPDF_PageModule::GetInstance()->GetStockCS(family);
-}
-
-// static
 RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::Load(
     CPDF_Document* pDoc,
     const CPDF_Object* pObj,
diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h
index 127b9f6..36b356d 100644
--- a/core/fpdfapi/page/cpdf_colorspace.h
+++ b/core/fpdfapi/page/cpdf_colorspace.h
@@ -69,6 +69,14 @@
     kPattern = 11,
   };
 
+  static void InitializeGlobals();
+  static void DestroyGlobals();
+
+  // `family` must be one of the following:
+  // - `kDeviceGray`
+  // - `kDeviceRGB`
+  // - `kDeviceCMYK`
+  // - `kPattern`
   static RetainPtr<CPDF_ColorSpace> GetStockCS(Family family);
   static RetainPtr<CPDF_ColorSpace> GetStockCSForName(const ByteString& name);
   static RetainPtr<CPDF_ColorSpace> Load(
diff --git a/core/fpdfapi/page/cpdf_pagemodule.cpp b/core/fpdfapi/page/cpdf_pagemodule.cpp
index 6cda676..09cf812e 100644
--- a/core/fpdfapi/page/cpdf_pagemodule.cpp
+++ b/core/fpdfapi/page/cpdf_pagemodule.cpp
@@ -8,8 +8,6 @@
 
 #include "core/fpdfapi/font/cpdf_fontglobals.h"
 #include "core/fpdfapi/page/cpdf_colorspace.h"
-#include "core/fpdfapi/page/cpdf_devicecs.h"
-#include "core/fpdfapi/page/cpdf_patterncs.h"
 #include "third_party/base/check.h"
 
 namespace {
@@ -37,34 +35,15 @@
   return g_PageModule;
 }
 
-CPDF_PageModule::CPDF_PageModule()
-    : m_StockGrayCS(pdfium::MakeRetain<CPDF_DeviceCS>(
-          CPDF_ColorSpace::Family::kDeviceGray)),
-      m_StockRGBCS(pdfium::MakeRetain<CPDF_DeviceCS>(
-          CPDF_ColorSpace::Family::kDeviceRGB)),
-      m_StockCMYKCS(pdfium::MakeRetain<CPDF_DeviceCS>(
-          CPDF_ColorSpace::Family::kDeviceCMYK)),
-      m_StockPatternCS(pdfium::MakeRetain<CPDF_PatternCS>()) {
-  m_StockPatternCS->InitializeStockPattern();
+CPDF_PageModule::CPDF_PageModule() {
+  CPDF_ColorSpace::InitializeGlobals();
   CPDF_FontGlobals::Create();
   CPDF_FontGlobals::GetInstance()->LoadEmbeddedMaps();
 }
 
 CPDF_PageModule::~CPDF_PageModule() {
   CPDF_FontGlobals::Destroy();
-}
-
-RetainPtr<CPDF_ColorSpace> CPDF_PageModule::GetStockCS(
-    CPDF_ColorSpace::Family family) {
-  if (family == CPDF_ColorSpace::Family::kDeviceGray)
-    return m_StockGrayCS;
-  if (family == CPDF_ColorSpace::Family::kDeviceRGB)
-    return m_StockRGBCS;
-  if (family == CPDF_ColorSpace::Family::kDeviceCMYK)
-    return m_StockCMYKCS;
-  if (family == CPDF_ColorSpace::Family::kPattern)
-    return m_StockPatternCS;
-  return nullptr;
+  CPDF_ColorSpace::DestroyGlobals();
 }
 
 void CPDF_PageModule::ClearStockFont(CPDF_Document* pDoc) {
diff --git a/core/fpdfapi/page/cpdf_pagemodule.h b/core/fpdfapi/page/cpdf_pagemodule.h
index dfd1308..a040413 100644
--- a/core/fpdfapi/page/cpdf_pagemodule.h
+++ b/core/fpdfapi/page/cpdf_pagemodule.h
@@ -7,12 +7,7 @@
 #ifndef CORE_FPDFAPI_PAGE_CPDF_PAGEMODULE_H_
 #define CORE_FPDFAPI_PAGE_CPDF_PAGEMODULE_H_
 
-#include "core/fpdfapi/page/cpdf_colorspace.h"
-#include "core/fxcrt/retain_ptr.h"
-
 class CPDF_Document;
-class CPDF_DeviceCS;
-class CPDF_PatternCS;
 
 class CPDF_PageModule {
  public:
@@ -21,17 +16,11 @@
   static void Destroy();
   static CPDF_PageModule* GetInstance();
 
-  RetainPtr<CPDF_ColorSpace> GetStockCS(CPDF_ColorSpace::Family family);
   void ClearStockFont(CPDF_Document* pDoc);
 
  private:
   CPDF_PageModule();
   ~CPDF_PageModule();
-
-  RetainPtr<CPDF_DeviceCS> m_StockGrayCS;
-  RetainPtr<CPDF_DeviceCS> m_StockRGBCS;
-  RetainPtr<CPDF_DeviceCS> m_StockCMYKCS;
-  RetainPtr<CPDF_PatternCS> m_StockPatternCS;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_PAGEMODULE_H_
