[llvm-commits] [vmkit] r52333 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaInitialise.cpp JavaIsolate.cpp JavaString.cpp Jnjvm.cpp LockedMap.h VirtualTables.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Jun 16 10:09:08 PDT 2008
Author: geoffray
Date: Mon Jun 16 12:09:07 2008
New Revision: 52333
URL: http://llvm.org/viewvc/llvm-project?rev=52333&view=rev
Log:
Dot not GC-allocate strings, since they don't point to GC-allocated memory.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=52333&r1=52332&r2=52333&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Mon Jun 16 12:09:07 2008
@@ -48,7 +48,6 @@
INIT(JavaThread);
INIT(Jnjvm);
INIT(ClassMap);
- INIT(StringMap);
INIT(StaticInstanceMap);
INIT(DelegateeMap);
INIT(JavaIsolate);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp?rev=52333&r1=52332&r2=52333&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp Mon Jun 16 12:09:07 2008
@@ -468,7 +468,7 @@
// We copy so that bootstrap utf8 such as "<init>" are unique
isolate->hashUTF8 = new UTF8Map();
bootstrapVM->hashUTF8->copy(isolate->hashUTF8);
- isolate->hashStr = vm_new(isolate, StringMap)();
+ isolate->hashStr = new StringMap();
isolate->bootstrapClasses = callingVM->bootstrapClasses;
isolate->javaTypes = new TypeMap();
isolate->globalRefsLock = mvm::Lock::allocNormal();
@@ -520,7 +520,7 @@
isolate->name = "bootstrapVM";
isolate->appClassLoader = 0;
isolate->hashUTF8 = new UTF8Map();
- isolate->hashStr = vm_new(isolate, StringMap)();
+ isolate->hashStr = new StringMap();
isolate->bootstrapClasses = vm_new(isolate, ClassMap)();
isolate->jniEnv = &JNI_JNIEnvTable;
isolate->javavmEnv = &JNI_JavaVMTable;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp?rev=52333&r1=52332&r2=52333&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp Mon Jun 16 12:09:07 2008
@@ -17,7 +17,11 @@
JavaString* JavaString::stringDup(const UTF8*& utf8, Jnjvm* vm) {
- JavaString* res = (JavaString*)Classpath::newString->doNew(vm);
+ Class* cl = Classpath::newString;
+ JavaString* res = (JavaString*)malloc(cl->virtualSize);
+ ((void**)res)[0] = cl->virtualVT;
+ res->classOf = cl;
+
// no need to call the function
// Classpath::initString->run(res, utf8, 0, utf8->size, true);
res->value = utf8;
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=52333&r1=52332&r2=52333&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Mon Jun 16 12:09:07 2008
@@ -809,6 +809,11 @@
GC->destroy();
delete GC;
#endif
+
+ delete hashUTF8;
+ delete hashStr;
+ delete javaTypes;
+
delete globalRefsLock;
delete TheModuleProvider;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=52333&r1=52332&r2=52333&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Mon Jun 16 12:09:07 2008
@@ -116,6 +116,13 @@
lock = mvm::Lock::allocNormal();
}
+ ~UTF8Map() {
+ delete lock;
+ for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
+ free((void*)i->second);
+ }
+ }
+
void copy(UTF8Map* newMap) {
for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
newMap->map.insert(*i);
@@ -134,20 +141,48 @@
ClassMap() {
lock = mvm::Lock::allocNormal();
}
+
+ virtual void destroyer(size_t sz) {
+ delete lock;
+ }
virtual void TRACER;
};
-class StringMap :
- public LockedMap<const UTF8*, JavaString*, ltutf8 > {
+class StringMap {
public:
- static VirtualTable* VT;
+
+ mvm::Lock* lock;
+ typedef std::map<const UTF8*, JavaString*, ltutf8>::iterator iterator;
+ std::map<const UTF8*, JavaString*, ltutf8 > map;
+
+ typedef JavaString* (*funcCreate)(const UTF8*& V, Jnjvm *vm);
StringMap() {
- lock = mvm::Lock::allocRecursive();
+ lock = mvm::Lock::allocNormal();
}
- virtual void TRACER;
+ ~StringMap() {
+ delete lock;
+ for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
+ free(i->second);
+ }
+ }
+
+ inline JavaString* lookupOrCreate(const UTF8*& V, Jnjvm *vm, funcCreate func) {
+ lock->lock();
+ iterator End = map.end();
+ iterator I = map.find(V);
+ if (I == End) {
+ JavaString* res = func(V, vm);
+ map.insert(std::make_pair(V, res));
+ lock->unlock();
+ return res;
+ } else {
+ lock->unlock();
+ return I->second;
+ }
+ }
};
class TypeMap {
@@ -175,6 +210,13 @@
lock = mvm::Lock::allocRecursive();
}
+ ~TypeMap() {
+ for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
+ delete i->second;
+ }
+ delete lock;
+ }
+
};
class StaticInstanceMap :
@@ -192,6 +234,7 @@
for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
delete i->second;
}
+ delete lock;
}
};
@@ -204,6 +247,10 @@
lock = mvm::Lock::allocNormal();
}
+ virtual void destroyer(size_t sz) {
+ delete lock;
+ }
+
virtual void TRACER;
};
Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=52333&r1=52332&r2=52333&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Mon Jun 16 12:09:07 2008
@@ -45,7 +45,6 @@
INIT(JavaThread);
INIT(Jnjvm);
INIT(ClassMap);
- INIT(StringMap);
INIT(StaticInstanceMap);
INIT(JavaIsolate);
INIT(DelegateeMap);
@@ -134,7 +133,6 @@
void Jnjvm::TRACER {
appClassLoader->MARK_AND_TRACE;
- hashStr->MARK_AND_TRACE;
bootstrapClasses->MARK_AND_TRACE;
TRACE_VECTOR(JavaObject*, gc_allocator, globalRefs);
#ifdef MULTIPLE_VM
@@ -154,12 +152,6 @@
}
}
-void StringMap::TRACER {
- for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
- i->second->MARK_AND_TRACE;
- }
-}
-
void StaticInstanceMap::TRACER {
for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
i->second->second->MARK_AND_TRACE;
More information about the llvm-commits
mailing list