提交 4c618edf 编写于 作者: D dsimms

8046919: jni_PushLocalFrame OOM - increase MAX_REASONABLE_LOCAL_CAPACITY

Summary: Increase the previous limit from 4k to 64k, added "-XX:MaxJNILocalCapacity=<capacity>" flag
Reviewed-by: hseigel, fparain
上级 1f952445
......@@ -292,15 +292,6 @@ void jfieldIDWorkaround::verify_instance_jfieldID(Klass* k, jfieldID id) {
"Bug in native code: jfieldID offset must address interior of object");
}
// Pick a reasonable higher bound for local capacity requested
// for EnsureLocalCapacity and PushLocalFrame. We don't want it too
// high because a test (or very unusual application) may try to allocate
// that many handles and run out of swap space. An implementation is
// permitted to allocate more handles than the ensured capacity, so this
// value is set high enough to prevent compatibility problems.
const int MAX_REASONABLE_LOCAL_CAPACITY = 4*K;
// Wrapper to trace JNI functions
#ifdef ASSERT
......@@ -880,7 +871,8 @@ JNI_ENTRY(jint, jni_PushLocalFrame(JNIEnv *env, jint capacity))
env, capacity);
#endif /* USDT2 */
//%note jni_11
if (capacity < 0 || capacity > MAX_REASONABLE_LOCAL_CAPACITY) {
if (capacity < 0 ||
((MaxJNILocalCapacity > 0) && (capacity > MaxJNILocalCapacity))) {
#ifndef USDT2
DTRACE_PROBE1(hotspot_jni, PushLocalFrame__return, JNI_ERR);
#else /* USDT2 */
......@@ -1039,7 +1031,8 @@ JNI_LEAF(jint, jni_EnsureLocalCapacity(JNIEnv *env, jint capacity))
env, capacity);
#endif /* USDT2 */
jint ret;
if (capacity >= 0 && capacity <= MAX_REASONABLE_LOCAL_CAPACITY) {
if (capacity >= 0 &&
((MaxJNILocalCapacity <= 0) || (capacity <= MaxJNILocalCapacity))) {
ret = JNI_OK;
} else {
ret = JNI_ERR;
......
......@@ -1216,6 +1216,11 @@ class CommandLineFlags {
product(bool, UseFastJNIAccessors, true, \
"Use optimized versions of Get<Primitive>Field") \
\
product(intx, MaxJNILocalCapacity, 65536, \
"Maximum allowable local JNI handle capacity to " \
"EnsureLocalCapacity() and PushLocalFrame(), " \
"where <= 0 is unlimited, default: 65536") \
\
product(bool, EagerXrunInit, false, \
"Eagerly initialize -Xrun libraries; allows startup profiling, " \
"but not all -Xrun libraries may support the state of the VM " \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册