[vmkit-commits] [vmkit] r85760 - in /vmkit/trunk: lib/Mvm/Compiler/JIT.cpp lib/Mvm/MMTk/MvmGC.cpp lib/Mvm/MMTk/MvmGC.h mmtk/mmtk-j3/Collection.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Nov 1 15:08:08 PST 2009


Author: geoffray
Date: Sun Nov  1 17:08:08 2009
New Revision: 85760

URL: http://llvm.org/viewvc/llvm-project?rev=85760&view=rev
Log:
Allow user-triggered collections.


Modified:
    vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
    vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
    vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
    vmkit/trunk/mmtk/mmtk-j3/Collection.cpp

Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=85760&r1=85759&r2=85760&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Sun Nov  1 17:08:08 2009
@@ -263,8 +263,10 @@
     gc::MMTkGetForwardedFinalizable = (gc::MMTkGetForwardedFinalizableType)
       (uintptr_t)executionEngine->getPointerToFunction(F);
     
-  
-  
+    F = globalModule->getFunction("Java_org_j3_mmtk_Collection_triggerCollection__I");
+    assert(F && "Could not find external collect");
+    gc::MMTkTriggerCollection = (gc::MMTkCollectType)
+      (uintptr_t)executionEngine->getPointerToFunction(F);
 
   }
 #endif

Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp?rev=85760&r1=85759&r2=85760&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp Sun Nov  1 17:08:08 2009
@@ -28,6 +28,7 @@
 gc::MMTkGetForwardedReferentType    gc::MMTkGetForwardedReferent = 0;
 gc::MMTkGetForwardedReferenceType   gc::MMTkGetForwardedReference = 0;
 gc::MMTkGetForwardedFinalizableType gc::MMTkGetForwardedFinalizable = 0;
+gc::MMTkCollectType                 gc::MMTkTriggerCollection = 0;
 
 uintptr_t Collector::TraceLocal = 0;
 

Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.h?rev=85760&r1=85759&r2=85760&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.h Sun Nov  1 17:08:08 2009
@@ -64,6 +64,7 @@
   typedef MMTkRetainReferentType MMTkGetForwardedReferenceType;
   typedef MMTkRetainReferentType MMTkGetForwardedReferentType;
   typedef MMTkRetainReferentType MMTkGetForwardedFinalizableType;
+  typedef void (*MMTkCollectType)(uintptr_t, int32_t);
 
   static MMTkAllocType MMTkGCAllocator;
   
@@ -85,6 +86,7 @@
   static MMTkGetForwardedReferentType MMTkGetForwardedReferent;
   static MMTkGetForwardedFinalizableType MMTkGetForwardedFinalizable;
 
+  static MMTkCollectType MMTkTriggerCollection;
 
   void* operator new(size_t sz, VirtualTable *VT) {
     assert(VT->tracer && "VT without a tracer");
@@ -158,7 +160,7 @@
   }
 
   static void collect() {
-    abort();
+    if (gc::MMTkTriggerCollection) gc::MMTkTriggerCollection(NULL, 2);
   }
   
   static void initialise();

Modified: vmkit/trunk/mmtk/mmtk-j3/Collection.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Collection.cpp?rev=85760&r1=85759&r2=85760&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Collection.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Collection.cpp Sun Nov  1 17:08:08 2009
@@ -39,7 +39,9 @@
   
   JnJVM_org_mmtk_plan_Plan_setCollectionTriggered__();
   JnJVM_org_j3_config_Selected_00024Collector_staticCollect__();
-  JnJVM_org_mmtk_utility_heap_HeapGrowthManager_considerHeapSize__();
+  // 2 means called by System.gc();
+  if (why != 2)
+    JnJVM_org_mmtk_utility_heap_HeapGrowthManager_considerHeapSize__();
   JnJVM_org_mmtk_plan_Plan_collectionComplete__();
 
   th->MyVM->rendezvous.finishRV();





More information about the vmkit-commits mailing list