[vmkit-commits] [vmkit] r76580 - in /vmkit/trunk/lib/JnJVM/VMCore: Jnjvm.cpp JnjvmClassLoader.cpp JnjvmClassLoader.h VirtualTables.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jul 21 09:50:06 PDT 2009
Author: geoffray
Date: Tue Jul 21 11:50:05 2009
New Revision: 76580
URL: http://llvm.org/viewvc/llvm-project?rev=76580&view=rev
Log:
Don't use vectors to sore strings located in class files.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=76580&r1=76579&r2=76580&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Jul 21 11:50:05 2009
@@ -1283,10 +1283,14 @@
upcalls = bootstrapLoader->upcalls;
throwable = upcalls->newThrowable;
-
- for (std::vector<JavaString*, gc_allocator<JavaString*> >::iterator i =
- loader->strings.begin(), e = loader->strings.end(); i != e; ++i) {
- hashStr.insert(*i);
+
+ StringList* end = loader->strings;
+ while (end) {
+ for (uint32 i = 0; i < end->length; ++i) {
+ JavaString* obj = end->strings[i];
+ hashStr.insert(obj);
+ }
+ end = end->prev;
}
bootstrapLoader->insertAllMethodsInVM(this);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=76580&r1=76579&r2=76580&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue Jul 21 11:50:05 2009
@@ -50,6 +50,11 @@
#include "Reader.h"
#include "Zip.h"
+
+namespace jnjvm {
+
+}
+
using namespace jnjvm;
typedef void (*static_init_t)(JnjvmClassLoader*);
@@ -64,7 +69,8 @@
hashUTF8 = new(allocator, "UTF8Map") UTF8Map(allocator);
classes = new(allocator, "ClassMap") ClassMap();
javaTypes = new(allocator, "TypeMap") TypeMap();
- javaSignatures = new(allocator, "SignMap") SignMap();
+ javaSignatures = new(allocator, "SignMap") SignMap();
+ strings = new(allocator, "StringList") StringList();
bootClasspathEnv = getenv("JNJVM_BOOTCLASSPATH");
if (!bootClasspathEnv) {
@@ -261,6 +267,7 @@
classes = new(allocator, "ClassMap") ClassMap();
javaTypes = new(allocator, "TypeMap") TypeMap();
javaSignatures = new(allocator, "SignMap") SignMap();
+ strings = new(allocator, "StringList") StringList();
javaLoader = loader;
isolate = I;
@@ -928,14 +935,14 @@
JavaString* JnjvmClassLoader::UTF8ToStr(const UTF8* val) {
JavaString* res = isolate->internalUTF8ToStr(val);
- strings.push_back(res);
+ strings->addString(this, res);
return res;
}
JavaString* JnjvmBootstrapLoader::UTF8ToStr(const UTF8* val) {
Jnjvm* vm = JavaThread::get()->getJVM();
JavaString* res = vm->internalUTF8ToStr(val);
- strings.push_back(res);
+ strings->addString(this, res);
return res;
}
@@ -1185,7 +1192,7 @@
}
extern "C" void vmjcAddString(JnjvmClassLoader* JCL, JavaString* val) {
- JCL->strings.push_back(val);
+ JCL->strings->addString(JCL, val);
}
extern "C" intptr_t vmjcNativeLoader(JavaMethod* meth) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=76580&r1=76579&r2=76580&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue Jul 21 11:50:05 2009
@@ -35,8 +35,10 @@
class JavaString;
class Jnjvm;
class JnjvmBootstrapLoader;
+class JnjvmClassLoader;
class Signdef;
class SignMap;
+class StringList;
class Typedef;
class TypeMap;
class UTF8;
@@ -239,7 +241,7 @@
/// Strings hashed by this classloader.
///
- std::vector<JavaString*, gc_allocator<JavaString*> > strings;
+ StringList* strings;
/// nativeLibs - Native libraries (e.g. '.so') loaded by this class loader.
///
@@ -455,6 +457,37 @@
};
+#define MAXIMUM_STRINGS 100
+
+class StringList : public mvm::PermanentObject {
+ friend class JnjvmClassLoader;
+ friend class Jnjvm;
+
+private:
+ StringList* prev;
+ uint32_t length;
+ JavaString* strings[MAXIMUM_STRINGS];
+
+public:
+ StringList() {
+ prev = 0;
+ length = 0;
+ }
+
+ JavaString** addString(JnjvmClassLoader* JCL, JavaString* obj) {
+ llvm_gcroot(obj, 0);
+ if (length == MAXIMUM_STRINGS) {
+ StringList* next = new(JCL->allocator, "StringList") StringList();
+ next->prev = this;
+ JCL->strings = next;
+ return next->addString(JCL, obj);
+ } else {
+ strings[length] = obj;
+ return &strings[length++];
+ }
+ }
+};
+
} // end namespace jnjvm
#endif // JNJVM_CLASSLOADER_H
Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=76580&r1=76579&r2=76580&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Tue Jul 21 11:50:05 2009
@@ -217,15 +217,17 @@
else cl->tracer();
}
- for (std::vector<JavaString*,
- gc_allocator<JavaString*> >::iterator i = strings.begin(),
- e = strings.end(); i!= e; ++i) {
- (*i)->markAndTrace();
- // If the string was static allocated, we want to trace its lock.
- LockObj* l = (*i)->lockObj();
- if (l) l->markAndTrace();
+ StringList* end = strings;
+ while (end) {
+ for (uint32 i = 0; i < end->length; ++i) {
+ JavaObject* obj = end->strings[i];
+ obj->markAndTrace();
+ // If the string was static allocated, we want to trace its lock.
+ LockObj* l = obj->lockObj();
+ if (l) l->markAndTrace();
+ }
+ end = end->prev;
}
-
}
void JnjvmBootstrapLoader::tracer() {
More information about the vmkit-commits
mailing list