This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch: FYI: don't call getSystemClassLoader()
- From: Tom Tromey <tromey at redhat dot com>
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Date: 09 Mar 2005 13:52:29 -0700
- Subject: Patch: FYI: don't call getSystemClassLoader()
- Reply-to: tromey at redhat dot com
I'm checking this in on the trunk and the 4.0 branch.
Andrew pointed out that calling getSystemClassLoader is expensive, as
we do a security check. I think there is no reason to call this
method from our native code; instead it is always safe to simply refer
to the field itself. Note that we don't rely on the class
initialization semantics of the method call in these places.
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* java/lang/natVMClassLoader.cc (defineClass): Reference
'systemClassLoader' field directly.
* java/lang/natRuntime.cc (_load): Reference 'systemClassLoader'
field directly.
* java/lang/natClassLoader.cc (_Jv_RegisterInitiatingLoader):
Reference 'systemClassLoader' field directly.
(_Jv_UnregisterInitiatingLoader): Likewise.
(_Jv_FindClass): Likewise.
Index: java/lang/natClassLoader.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natClassLoader.cc,v
retrieving revision 1.76
diff -u -r1.76 natClassLoader.cc
--- java/lang/natClassLoader.cc 7 Feb 2005 21:29:04 -0000 1.76
+++ java/lang/natClassLoader.cc 9 Mar 2005 20:33:42 -0000
@@ -106,7 +106,7 @@
_Jv_RegisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader)
{
if (! loader)
- loader = java::lang::ClassLoader::getSystemClassLoader();
+ loader = java::lang::ClassLoader::systemClassLoader;
loader->loadedClasses->put(klass->name->toString(), klass);
}
@@ -116,7 +116,7 @@
_Jv_UnregisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader)
{
if (! loader)
- loader = java::lang::ClassLoader::getSystemClassLoader();
+ loader = java::lang::ClassLoader::systemClassLoader;
loader->loadedClasses->remove(klass->name->toString());
}
@@ -211,8 +211,7 @@
// See if the class was already loaded by this loader. This handles
// initiating loader checks, as we register classes with their
// initiating loaders.
- java::lang::ClassLoader *sys
- = java::lang::ClassLoader::getSystemClassLoader ();
+ java::lang::ClassLoader *sys = java::lang::ClassLoader::systemClassLoader;
java::lang::ClassLoader *real = loader;
if (! real)
real = sys;
Index: java/lang/natRuntime.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natRuntime.cc,v
retrieving revision 1.47
diff -u -r1.47 natRuntime.cc
--- java/lang/natRuntime.cc 23 Feb 2005 17:36:25 -0000 1.47
+++ java/lang/natRuntime.cc 9 Mar 2005 20:33:42 -0000
@@ -163,7 +163,7 @@
if (do_search)
{
- ClassLoader *sys = ClassLoader::getSystemClassLoader();
+ ClassLoader *sys = ClassLoader::systemClassLoader;
ClassLoader *look = NULL;
gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(10);
try
Index: java/lang/natVMClassLoader.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natVMClassLoader.cc,v
retrieving revision 1.6
diff -u -r1.6 natVMClassLoader.cc
--- java/lang/natVMClassLoader.cc 7 Feb 2005 21:29:04 -0000 1.6
+++ java/lang/natVMClassLoader.cc 9 Mar 2005 20:33:42 -0000
@@ -68,7 +68,7 @@
// Record the defining loader. For the system class loader, we
// record NULL.
- if (loader != java::lang::ClassLoader::getSystemClassLoader())
+ if (loader != java::lang::ClassLoader::systemClassLoader)
klass->loader = loader;
if (name != 0)