2010/1/4 Regis <[email protected]>: > On 2010-01-04 12:55, Tim Prepscius wrote: >> >> That was the plan. I am linking hyluni as a static already. I think >> there is some additional initialization I must do somewhere. >> But at this point, I'm more concerned with the 33 megabytes being used >> for just a partial initialization. >> >> >> If these 33 megabytes are coming because somewhere something is >> allocating 32 megabytes reserve heap, and then is going to >> sub-allocate that for java objects, then I can probably modify this >> behavior somehow to allocate as needed. But if 33 megabytes are being >> allocated for java initializations- then it would take a whole lot of >> work before I can use harmony. >> >> It's really hard for me to believe that 33 megabytes are coming from >> loaded classes. I'll investigate more this week. Hmm.. Maybe the >> garbage collector needs to be invoked or something? > > IIRC, the java heap is about 4MB for simple HelloWorld, I guess the most of > memory is consumed by vm, not classlib. I guess most of those 33M are reserved by GC. Quick browsing shows (working_vm\vm\gc_gen\src\common\gc_options.cpp) that by default gc_gen sets min heap size as 1/10 of the default max heap which is 256M. Plus there are a bunch of various pools (vtables, jitted code, classloaders, interned strings etc) pre-allocated by VM. Historically, the DRLVM was mostly server-oriented so the default settings (size of pools in particular) seem to be overkill for your purposes.
>> >> Does anyone know what the minimum memory usage is for an initialized >> jvm before executing client code.. meaning after all of the necessary >> initialization classes are loaded, but before any client app dependent >> classes are loaded, etc etc etc etc? > > Will some profiling tools like Valgrind or strace can help to figure out who > allocate the largest memory blocks? Trace logs might help as well, drlvm has decent support of built-in debug logging. It is enabled with -Xtrace option in debug build (run with -X to get more details). >> >> Currently the libraries I'm linking statically are: >> apr-1.lib, ch.lib, em.lib, encoder.lib, harmonyvm.lib, hycommon.lib, >> hyprt.lib, hythr.lib, hyzip.lib, icuuc34d.lib, interpreter.lib, >> port.lib, verifier.lib, vmi.lib, zlib.lib, hyluni.lib, >> gc_gen_uncomp.lib AFAIR the icuuc is the best next candidate for ablation. It is quite massive but useful mostly for exotic cases like fancy unicode strings in classfile constant pools. >> >> I'm doing the static JNI initialization via a table I'm adding to by >> hand.. I was hoping to add the minimal set needed for initialization >> and things I wanted to support, and then tell the linker to remove >> dead code, and see what it removed. >> Sorry for the dumb question, did you fix the classlib build to produce static libs? I've seen you concentrated on the vm so far. >> >> Happy New Year!!! Thanks, and all the best wishes to you too! -- Alexey
