Implement -Xjnigreflimit.

Change-Id: Iaa31cf4ea4f90fc76baa4472b67fe6c2cc0e0277
diff --git a/src/jni_internal.cc b/src/jni_internal.cc
index 9480644..02c8513 100644
--- a/src/jni_internal.cc
+++ b/src/jni_internal.cc
@@ -24,6 +24,8 @@
 #include "stringpiece.h"
 #include "thread.h"
 
+namespace art {
+
 static const size_t kMonitorsInitial = 32; // Arbitrary.
 static const size_t kMonitorsMax = 4096; // Arbitrary sanity check.
 
@@ -33,13 +35,18 @@
 static const size_t kPinTableInitial = 16; // Arbitrary.
 static const size_t kPinTableMax = 1024; // Arbitrary sanity check.
 
-static const size_t kGlobalsInitial = 512; // Arbitrary.
-static const size_t kGlobalsMax = 51200; // Arbitrary sanity check.
+static size_t gGlobalsInitial = 512; // Arbitrary.
+static size_t gGlobalsMax = 51200; // Arbitrary sanity check.
 
 static const size_t kWeakGlobalsInitial = 16; // Arbitrary.
 static const size_t kWeakGlobalsMax = 51200; // Arbitrary sanity check.
 
-namespace art {
+void SetJniGlobalsMax(size_t max) {
+  if (max != 0) {
+    gGlobalsMax = max;
+    gGlobalsInitial = std::min(gGlobalsInitial, gGlobalsMax);
+  }
+}
 
 /*
  * Add a local reference for an object to the current stack frame.  When
@@ -2662,7 +2669,7 @@
       pins_lock("JNI pin table lock"),
       pin_table("pin table", kPinTableInitial, kPinTableMax),
       globals_lock("JNI global reference table lock"),
-      globals(kGlobalsInitial, kGlobalsMax, kGlobal),
+      globals(gGlobalsInitial, gGlobalsMax, kGlobal),
       weak_globals_lock("JNI weak global reference table lock"),
       weak_globals(kWeakGlobalsInitial, kWeakGlobalsMax, kWeakGlobal),
       libraries_lock("JNI shared libraries map lock"),