[vmkit-commits] [vmkit] r57351 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h JavaInitialise.cpp JnjvmClassLoader.cpp JnjvmClassLoader.h LockedMap.h VirtualTables.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Oct 10 08:40:35 PDT 2008
Author: geoffray
Date: Fri Oct 10 10:40:35 2008
New Revision: 57351
URL: http://llvm.org/viewvc/llvm-project?rev=57351&view=rev
Log:
Make ClassMap non-GC allocated. Classes still need to be GC-allocated
because they may be referenced by things external to the class loader.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=57351&r1=57350&r2=57351&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Fri Oct 10 10:40:35 2008
@@ -90,8 +90,7 @@
CommonClass::~CommonClass() {
- free(display);
- free(virtualVT);
+ delete display;
delete lockVar;
delete condVar;
}
@@ -107,6 +106,8 @@
ctpInfo = 0;
staticVT = 0;
JInfo = 0;
+ outerClass = 0;
+ innerOuterResolved = false;
}
Class::~Class() {
@@ -142,6 +143,11 @@
delete ctpInfo;
free(staticVT);
+
+ // Currently, only regular classes have a heap allocated virtualVT.
+ // Array classes have a C++ allocated virtualVT and primitive classes
+ // do not have a virtualVT.
+ free(virtualVT);
}
JavaField::~JavaField() {
@@ -257,6 +263,7 @@
CommonClass::CommonClass(JnjvmClassLoader* loader, const UTF8* n,
bool isArray) {
name = n;
+ this->virtualVT = 0;
this->lockVar = mvm::Lock::allocRecursive();
this->condVar = mvm::Cond::allocCond();
this->status = loaded;
@@ -272,7 +279,7 @@
uint32 nb) :
CommonClass(loader, n, false) {
- display = (CommonClass**)malloc(sizeof(CommonClass*));
+ display = new CommonClass*[1];
display[0] = this;
primitive = true;
status = ready;
@@ -286,6 +293,9 @@
super = 0;
ctpInfo = 0;
JInfo = 0;
+ outerClass = 0;
+ innerOuterResolved = false;
+ display = 0;
#if !defined(ISOLATE) && !defined(ISOLATE_SHARING)
_staticInstance = 0;
#endif
@@ -298,7 +308,7 @@
super = ClassArray::SuperArray;
interfaces = ClassArray::InterfacesArray;
depth = 1;
- display = (CommonClass**)malloc(2 * sizeof(CommonClass*));
+ display = new CommonClass*[2];
display[0] = ClassArray::SuperArray;
display[1] = this;
access = ACC_FINAL | ACC_ABSTRACT | ACC_PUBLIC;
@@ -670,12 +680,12 @@
const UTF8* superUTF8 = getSuperUTF8();
if (superUTF8 == 0) {
depth = 0;
- display = (UserCommonClass**)malloc(sizeof(UserCommonClass*));
+ display = new UserCommonClass*[1];
display[0] = this;
} else {
super = classLoader->loadName(superUTF8, true, true);
depth = super->depth + 1;
- display = (UserCommonClass**)malloc((depth + 1) * sizeof(UserCommonClass*));
+ display = new UserCommonClass*[depth + 1];
memcpy(display, super->display, depth * sizeof(UserCommonClass*));
display[depth] = this;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=57351&r1=57350&r2=57351&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Fri Oct 10 10:40:35 2008
@@ -118,8 +118,9 @@
};
/// CommonClass - This class is the root class of all Java classes. It is
-/// currently GC-allocated in JnJVM, but will be permanently allocated when the
-/// class loader finalizer method will be defined.
+/// GC-allocated because CommonClasses have to be traceable. A java/lang/Class
+/// object that stays in memory has a reference to the class. Same for
+/// super or interfaces.
///
class CommonClass : public mvm::Object {
#ifdef ISOLATE_SHARING
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=57351&r1=57350&r2=57351&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Fri Oct 10 10:40:35 2008
@@ -50,7 +50,6 @@
INIT(ClassArray);
INIT(JavaThread);
INIT(Jnjvm);
- INIT(ClassMap);
INIT(JnjvmBootstrapLoader);
INIT(JnjvmClassLoader);
#ifdef ISOLATE_SHARING
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=57351&r1=57350&r2=57351&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Fri Oct 10 10:40:35 2008
@@ -47,7 +47,7 @@
JCL->allocator = new JavaAllocator();
JCL->hashUTF8 = new UTF8Map(JCL->allocator, 0);
- JCL->classes = allocator_new(allocator, ClassMap)();
+ JCL->classes = new ClassMap();
JCL->javaTypes = new TypeMap();
JCL->javaSignatures = new SignMap();
@@ -77,7 +77,7 @@
allocator = &(isolate->allocator);
hashUTF8 = new UTF8Map(allocator, bootstrapLoader->upcalls->ArrayOfChar);
- classes = allocator_new(allocator, ClassMap)();
+ classes = new ClassMap();
javaTypes = new TypeMap();
javaSignatures = new SignMap();
@@ -388,6 +388,7 @@
}
JnjvmClassLoader::~JnjvmClassLoader() {
+ delete classes;
delete hashUTF8;
delete javaTypes;
delete javaSignatures;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=57351&r1=57350&r2=57351&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Fri Oct 10 10:40:35 2008
@@ -204,6 +204,7 @@
TheModule = 0;
TheModuleProvider = 0;
isolate = 0;
+ classes = 0;
}
#ifdef ISOLATE_SHARING
Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=57351&r1=57350&r2=57351&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Fri Oct 10 10:40:35 2008
@@ -40,7 +40,7 @@
};
template<class Key, class Container, class Compare, class Meta>
-class LockedMap : public mvm::Object {
+class LockedMap {
public:
typedef typename std::map<const Key, Container, Compare>::iterator iterator;
typedef Container (*funcCreate)(Key& V, Meta meta);
@@ -130,7 +130,6 @@
class ClassMap :
public LockedMap<const UTF8*, UserCommonClass*, ltutf8, JnjvmClassLoader* > {
public:
- static VirtualTable* VT;
ClassMap() {
lock = mvm::Lock::allocNormal();
@@ -140,7 +139,6 @@
delete lock;
}
- virtual void TRACER;
};
class StringMap {
Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=57351&r1=57350&r2=57351&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Fri Oct 10 10:40:35 2008
@@ -37,7 +37,6 @@
INIT(JavaObject);
INIT(JavaThread);
INIT(Jnjvm);
- INIT(ClassMap);
INIT(JnjvmBootstrapLoader);
INIT(JnjvmClassLoader);
#if defined(ISOLATE_SHARING)
@@ -68,6 +67,8 @@
(*i)->MARK_AND_TRACE; }}
void CommonClass::TRACER {
+ super->MARK_AND_TRACE;
+ TRACE_VECTOR(Class*, gc_allocator, interfaces);
classLoader->MARK_AND_TRACE;
#if !defined(ISOLATE)
delegatee->MARK_AND_TRACE;
@@ -76,6 +77,8 @@
void Class::TRACER {
CommonClass::CALL_TRACER;
+ TRACE_VECTOR(Class*, gc_allocator, innerClasses);
+ outerClass->MARK_AND_TRACE;
bytes->MARK_AND_TRACE;
#if !defined(ISOLATE)
_staticInstance->MARK_AND_TRACE;
@@ -116,20 +119,21 @@
#endif
}
-void ClassMap::TRACER {
- for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
+static void traceClassMap(ClassMap* classes) {
+ for (ClassMap::iterator i = classes->map.begin(), e = classes->map.end();
+ i!= e; ++i) {
i->second->MARK_AND_TRACE;
}
}
void JnjvmClassLoader::TRACER {
javaLoader->MARK_AND_TRACE;
- classes->MARK_AND_TRACE;
+ traceClassMap(classes);
isolate->MARK_AND_TRACE;
}
void JnjvmBootstrapLoader::TRACER {
- classes->MARK_AND_TRACE;
+ traceClassMap(classes);
for (std::vector<ZipArchive*>::iterator i = bootArchives.begin(),
e = bootArchives.end(); i != e; ++i) {
More information about the vmkit-commits
mailing list