Mercurial > hg > truffle
comparison src/share/vm/prims/jniCheck.cpp @ 917:1760a1cbed36
6862945: 4/3 conversion of jmethodID to methodOop in JVMTI is too expensive
Summary: Refactor JNIHandles::checked_resolve_jmethod_id() into fast and paranoid parts.
Reviewed-by: never, alanb
author | dcubed |
---|---|
date | Tue, 11 Aug 2009 11:57:51 -0600 |
parents | ad8c8ca4ab0f |
children | 4ce7240d622c |
comparison
equal
deleted
inserted
replaced
881:16c930df1e9b | 917:1760a1cbed36 |
---|---|
1 /* | 1 /* |
2 * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved. | 2 * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
94 static const char * fatal_bad_ref_to_jni = "Bad global or local ref passed to JNI"; | 94 static const char * fatal_bad_ref_to_jni = "Bad global or local ref passed to JNI"; |
95 static const char * fatal_received_null_class = "JNI received a null class"; | 95 static const char * fatal_received_null_class = "JNI received a null class"; |
96 static const char * fatal_class_not_a_class = "JNI received a class argument that is not a class"; | 96 static const char * fatal_class_not_a_class = "JNI received a class argument that is not a class"; |
97 static const char * fatal_class_not_a_throwable_class = "JNI Throw or ThrowNew received a class argument that is not a Throwable or Throwable subclass"; | 97 static const char * fatal_class_not_a_throwable_class = "JNI Throw or ThrowNew received a class argument that is not a Throwable or Throwable subclass"; |
98 static const char * fatal_wrong_class_or_method = "Wrong object class or methodID passed to JNI call"; | 98 static const char * fatal_wrong_class_or_method = "Wrong object class or methodID passed to JNI call"; |
99 static const char * fatal_non_weak_method = "non-weak methodID passed to JNI call"; | |
99 static const char * fatal_unknown_array_object = "Unknown array object passed to JNI array operations"; | 100 static const char * fatal_unknown_array_object = "Unknown array object passed to JNI array operations"; |
100 static const char * fatal_object_array_expected = "Object array expected but not received for JNI array operation"; | 101 static const char * fatal_object_array_expected = "Object array expected but not received for JNI array operation"; |
101 static const char * fatal_non_array = "Non-array passed to JNI array operations"; | 102 static const char * fatal_non_array = "Non-array passed to JNI array operations"; |
102 static const char * fatal_element_type_mismatch = "Array element type mismatch in JNI"; | 103 static const char * fatal_element_type_mismatch = "Array element type mismatch in JNI"; |
103 static const char * fatal_should_be_static = "Non-static field ID passed to JNI"; | 104 static const char * fatal_should_be_static = "Non-static field ID passed to JNI"; |
289 } | 290 } |
290 | 291 |
291 | 292 |
292 methodOop jniCheck::validate_jmethod_id(JavaThread* thr, jmethodID method_id) { | 293 methodOop jniCheck::validate_jmethod_id(JavaThread* thr, jmethodID method_id) { |
293 ASSERT_OOPS_ALLOWED; | 294 ASSERT_OOPS_ALLOWED; |
295 // do the fast jmethodID check first | |
294 methodOop moop = JNIHandles::checked_resolve_jmethod_id(method_id); | 296 methodOop moop = JNIHandles::checked_resolve_jmethod_id(method_id); |
295 if (moop == NULL) { | 297 if (moop == NULL) { |
296 ReportJNIFatalError(thr, fatal_wrong_class_or_method); | 298 ReportJNIFatalError(thr, fatal_wrong_class_or_method); |
299 } | |
300 // jmethodIDs are supposed to be weak global handles, but that | |
301 // can be expensive so check it last | |
302 else if (!JNIHandles::is_weak_global_handle((jobject) method_id)) { | |
303 ReportJNIFatalError(thr, fatal_non_weak_method); | |
297 } | 304 } |
298 return moop; | 305 return moop; |
299 } | 306 } |
300 | 307 |
301 | 308 |