[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