added Makefile to build simple GC tests in scratch (tests which cannot be run with openjdk currently because native interface stuff);
rm -rf $(BUILD) mate mate.static mate.dbg ffi/native.o \
tests/*.class Mate/*_stub.* \
jmate/lang/*.class jmate/io/*.class java/io/*.class \
- java/lang/{Integer,Character,String,System}.class
+ java/lang/{Integer,Character,String,System}.class \
+ scratch/*.class
ghci: mate.static
ghci -I. $(PACKAGES) -outputdir $(B_STATIC) Mate.hs $(GHC_CPP)
@# ignore error code from hlint
-hlint Mate.hs Mate/
@mv debug_tmp.h debug.h
+
+scratch: mate $(wildcard jmate/lang/*.java) scratch/GCTest.java
+ javac $(wildcard jmate/lang/*.java)
+ javac scratch/GCTest.java
+ ./mate scratch.GCTest
getHeapMemory,
printMemoryUsage,
mallocStringVM,
- mallocObjectVM) where
+ mallocObjectVM,
+ printGCStats) where
import Foreign
import Foreign.C
import Mate.GC.Boehm
-import Text.Printf
+--import Text.Printf
import Mate.Debug
-- unified place for allocating Memory
printfStr "mallocObject VM: %d\n" size
return $ fromIntegral $ ptrToIntPtr ptr
--- TODO: delete me
-foreign export ccall demoInterfaceCall :: CUInt -> IO ()
-demoInterfaceCall :: CUInt -> IO ()
-demoInterfaceCall val = do
- printf "demoInterfaceCall: 0x%08x\n" (fromIntegral val :: Word32)
- return ()
-
getHeapMemory :: IO Int
getHeapMemory = getHeapSizeGC
-
foreign export ccall printMemoryUsage :: IO ()
printMemoryUsage :: IO ()
printMemoryUsage = getHeapMemory >>= print
+
+foreign export ccall printGCStats :: IO ()
+printGCStats :: IO ()
+printGCStats = putStrLn "Should print GC Stats"
foreign import ccall "dynamic"
code_void :: FunPtr (IO ()) -> IO ()
-foreign import ccall "&demoInterfaceCall"
- demoInterfaceCallAddr :: FunPtr (CUInt -> IO ())
-
foreign import ccall "&printMemoryUsage"
printMemoryUsageAddr :: FunPtr (IO ())
foreign import ccall "&loadLibrary"
loadLibraryAddr :: FunPtr (IO ())
+foreign import ccall "&printGCStats"
+ printGCStatsAddr :: FunPtr (IO ())
+
getMethodEntry :: CPtrdiff -> CPtrdiff -> IO CPtrdiff
getMethodEntry signal_from methodtable = do
mmap <- getMethodMap
case smethod of
"loadLibrary" ->
return . funPtrToAddr $ loadLibraryAddr
- "demoInterfaceCall" ->
- return . funPtrToAddr $ demoInterfaceCallAddr
+ "printGCStats" ->
+ return . funPtrToAddr $ printGCStatsAddr
"printMemoryUsage" ->
return . funPtrToAddr $ printMemoryUsageAddr
_ ->
public static native void loadLibrary(String lib);
public static native int getCurrentHeapSize();
+ public static native void printGCStats();
}
--- /dev/null
+package scratch;
+
+import jmate.lang.MateRuntime;
+
+public class GCTest
+{
+ public static void main(String[] args)
+ {
+ List myList = new List(3,
+ new List(5,
+ new List(6,
+ new List(10,null))));
+
+ MateRuntime.printGCStats();
+ System.out.println("done.");
+ }
+}
+
+class List
+{
+ public int elem;
+ public List xs;
+
+ public List(int elem, List xs)
+ {
+ this.elem = elem;
+ this.xs = xs;
+ }
+}