diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h
index 3da2c1a..d85fc6f 100644
--- a/fpdfsdk/include/javascript/IJavaScript.h
+++ b/fpdfsdk/include/javascript/IJavaScript.h
@@ -11,10 +11,11 @@
 #include "../../../core/include/fxcrt/fx_system.h"
 #include "../../../xfa/include/fxjse/fxjse.h"
 
-class CPDF_Bookmark;
-class CPDF_FormField;
+class CPDFDoc_Environment;
 class CPDFSDK_Annot;
 class CPDFSDK_Document;
+class CPDF_Bookmark;
+class CPDF_FormField;
 
 class IFXJS_Context {
  public:
@@ -150,27 +151,19 @@
   virtual ~IFXJS_Runtime() {}
 };
 
-class CPDFDoc_Environment;
-class CJS_GlobalData;
-
 class CJS_RuntimeFactory {
  public:
-  CJS_RuntimeFactory()
-      : m_bInit(FALSE), m_nRef(0), m_pGlobalData(NULL), m_nGlobalDataCount(0) {}
+  CJS_RuntimeFactory() : m_bInit(FALSE), m_nRef(0) {}
   ~CJS_RuntimeFactory();
+
   IFXJS_Runtime* NewJSRuntime(CPDFDoc_Environment* pApp);
   void DeleteJSRuntime(IFXJS_Runtime* pRuntime);
   void AddRef();
   void Release();
 
-  CJS_GlobalData* NewGlobalData(CPDFDoc_Environment* pApp);
-  void ReleaseGlobalData();
-
  private:
   FX_BOOL m_bInit;
   int m_nRef;
-  CJS_GlobalData* m_pGlobalData;
-  int32_t m_nGlobalDataCount;
 };
 
 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_
diff --git a/fpdfsdk/include/javascript/JS_GlobalData.h b/fpdfsdk/include/javascript/JS_GlobalData.h
index 46b94a4..644e0d8 100644
--- a/fpdfsdk/include/javascript/JS_GlobalData.h
+++ b/fpdfsdk/include/javascript/JS_GlobalData.h
@@ -58,10 +58,9 @@
 
 class CJS_GlobalData {
  public:
-  CJS_GlobalData(CPDFDoc_Environment* pApp);
-  virtual ~CJS_GlobalData();
+  static CJS_GlobalData* GetRetainedInstance(CPDFDoc_Environment* pApp);
+  void Release();
 
- public:
   void SetGlobalVariableNumber(const FX_CHAR* propname, double dData);
   void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData);
   void SetGlobalVariableString(const FX_CHAR* propname,
@@ -78,6 +77,11 @@
   CJS_GlobalData_Element* GetAt(int index) const;
 
  private:
+  static CJS_GlobalData* g_Instance;
+
+  CJS_GlobalData(CPDFDoc_Environment* pApp);
+  ~CJS_GlobalData();
+
   void LoadGlobalPersistentVariables();
   void SaveGlobalPersisitentVariables();
 
@@ -95,6 +99,7 @@
                       CFX_BinaryBuf& sData);
 
  private:
+  size_t m_RefCount;
   CFX_ArrayTemplate<CJS_GlobalData_Element*> m_arrayGlobalData;
   CFX_WideString m_sFilePath;
   CPDFDoc_Environment* m_pApp;
diff --git a/fpdfsdk/src/javascript/JS_GlobalData.cpp b/fpdfsdk/src/javascript/JS_GlobalData.cpp
index 567e4f2..a4afb9d 100644
--- a/fpdfsdk/src/javascript/JS_GlobalData.cpp
+++ b/fpdfsdk/src/javascript/JS_GlobalData.cpp
@@ -99,19 +99,32 @@
     0x0e, 0xd0, 0x6b, 0xbb, 0xd5, 0x75, 0x55, 0x8b, 0x6e, 0x6b, 0x19, 0xa0,
     0xf8, 0x77, 0xd5, 0xa3};
 
-CJS_GlobalData::CJS_GlobalData(CPDFDoc_Environment* pApp) : m_pApp(pApp) {
-  //  IBaseAnnot* pBaseAnnot = IBaseAnnot::GetBaseAnnot(m_pApp);
-  //  ASSERT(pBaseAnnot != NULL);
-  //
-  //  m_sFilePath = pBaseAnnot->GetUserPath();
-  m_sFilePath += SDK_JS_GLOBALDATA_FILENAME;
+CJS_GlobalData* CJS_GlobalData::g_Instance = nullptr;
 
+// static
+CJS_GlobalData* CJS_GlobalData::GetRetainedInstance(CPDFDoc_Environment* pApp) {
+  if (!g_Instance) {
+    g_Instance = new CJS_GlobalData(pApp);
+  }
+  ++g_Instance->m_RefCount;
+  return g_Instance;
+}
+
+void CJS_GlobalData::Release() {
+  if (!--m_RefCount) {
+    delete g_Instance;
+    g_Instance = nullptr;
+  }
+}
+
+CJS_GlobalData::CJS_GlobalData(CPDFDoc_Environment* pApp)
+    : m_pApp(pApp), m_RefCount(0) {
+  m_sFilePath += SDK_JS_GLOBALDATA_FILENAME;
   LoadGlobalPersistentVariables();
 }
 
 CJS_GlobalData::~CJS_GlobalData() {
   SaveGlobalPersisitentVariables();
-
   for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++)
     delete m_arrayGlobalData.GetAt(i);
 
@@ -119,19 +132,12 @@
 }
 
 int CJS_GlobalData::FindGlobalVariable(const FX_CHAR* propname) {
-  ASSERT(propname != NULL);
-
-  int nRet = -1;
-
   for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) {
     CJS_GlobalData_Element* pTemp = m_arrayGlobalData.GetAt(i);
-    if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname) {
-      nRet = i;
-      break;
-    }
+    if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname)
+      return i;
   }
-
-  return nRet;
+  return -1;
 }
 
 CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(
diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp
index 880fade..afc6db6 100644
--- a/fpdfsdk/src/javascript/JS_Runtime.cpp
+++ b/fpdfsdk/src/javascript/JS_Runtime.cpp
@@ -52,7 +52,6 @@
     // to do.Should be implemented as atom manipulation.
     if (--m_nRef == 0) {
       JS_Release();
-      ReleaseGlobalData();
       m_bInit = FALSE;
     }
   }
@@ -62,25 +61,6 @@
   delete (CJS_Runtime*)pRuntime;
 }
 
-CJS_GlobalData* CJS_RuntimeFactory::NewGlobalData(CPDFDoc_Environment* pApp) {
-  if (m_pGlobalData) {
-    m_nGlobalDataCount++;
-    return m_pGlobalData;
-  }
-  m_nGlobalDataCount = 1;
-  m_pGlobalData = new CJS_GlobalData(pApp);
-  return m_pGlobalData;
-}
-
-void CJS_RuntimeFactory::ReleaseGlobalData() {
-  m_nGlobalDataCount--;
-
-  if (m_nGlobalDataCount <= 0) {
-    delete m_pGlobalData;
-    m_pGlobalData = NULL;
-  }
-}
-
 void* CJS_ArrayBufferAllocator::Allocate(size_t length) {
   return calloc(1, length);
 }
diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp
index 0770912..e87db8c 100644
--- a/fpdfsdk/src/javascript/global.cpp
+++ b/fpdfsdk/src/javascript/global.cpp
@@ -109,13 +109,12 @@
 
 JSGlobalAlternate::~JSGlobalAlternate() {
   DestroyGlobalPersisitentVariables();
-  CPDFXFA_App::GetInstance()->GetRuntimeFactory()->ReleaseGlobalData();
+  m_pGlobalData->Release();
 }
 
 void JSGlobalAlternate::Initial(CPDFDoc_Environment* pApp) {
   m_pApp = pApp;
-  m_pGlobalData =
-      CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewGlobalData(pApp);
+  m_pGlobalData = CJS_GlobalData::GetRetainedInstance(pApp);
   UpdateGlobalPersistentVariables();
 }
 
