This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: FYI: don't call getSystemClassLoader()


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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]