TO-DO list ---------- Virtual machine - Make _jc_env * have per-thread linkage: http://people.redhat.com/drepper/tls.pdf - Compress vtables by mapping overridden methods to superclass. Requires virtual method lookup at generation time. - Why does a conglomerated ELF object save a lot of memory? - Add a flag to control on-demand heap initialization. Perform GC attempts before heap is completely full. Implement jc.heap.initial. - Put the line number tables in a custom ELF section, then remove the section hack from _JC_STRING(). - _jc_type contains pointer to bs->hint; use to inline allocations of small objects when the hint is correct and it's not the last block in the page. For large object, pointer always points to NULL. - Fix _JC_STACK_ALLOC() to detect stack overflows. - Handle the case where _JC_FULL_ALIGNMENT > sizeof(_jc_word). If so, then objects with an odd number of references could have primitive fields that are not aligned. - Use libunwind: http://www.hpl.hp.com/research/linux/libunwind/ Should make the common case of uncaught exceptions faster. - http://www.cl.cam.ac.uk/Research/SRG/netos/lock-free/ - Sun's SIGQUIT debugging menu: http://docs.sun.com/db/doc/806-1367/6jalj6mv1?a=view - Show locked objects in SIGUSR1 output (by examining stack) - Fix all broken Mauve tests - Try jack benchmark; use gprof to find & optimize hotspots - Add support for retaining line numbers of inlined methods - Generational garbage collection: mark each heap pages as part of some generation. When a full page survives GC without losing any objects, bump it's generation. Code generation - Record inlined method information to fix disappearing stack frames. - Add lots of "restrict" keywords in the generated code. - Support enable/disable assertions; when disabled, use Soot to remove the assertion checking bytecode. - Find class initializers that just fill in static arrays with non-String constants and pre-generate them instead. - Make the dependency analysis more precise to avoid unecessary recompilations due to non-structural changes. - Implement thin-lock locking inline in the generated code. Other random ideas: - New gc/heap algorithm: single space, compacting, generational, compare-and-swap alloc. generational via starting point for compact. Known bugs ---------- - _jc_cs_fmod() is probably wrong on at least some platforms - Java 'volatile' longs and doubles should be accessed atomically. Need a new macro for reading&writing volatile longs & doubles. - Should impose global memory read barrier with MONITORENTER and global memory write barrier with MONITOREXIT in thin lock case. In the fat lock case, pthread_mutex_*() guarantees this for us. Random Notes ------------ - http://developer.java.sun.com/developer/bugParade/bugs/4329831.html What exactly is the memory model that we inherit from C? Are we violating the current JVM spec in any way? - Interesting Sun JVM bug: http://developer.java.sun.com/developer/bugParade/bugs/4699981.html References ---------- - New classfile format with CONSTANT_Class literals http://jcp.org/en/jsr/detail?id=202 - Assertions http://java.sun.com/docs/books/jls/assert-spec.html#semantics http://java.sun.com/j2se/1.4/docs/guide/lang/assert.html - New Java memory model and JSR-133 http://gee.cs.oswego.edu/dl/jmm/cookbook.html - JVM changes http://java.sun.com/docs/books/jls/jls-proposed-changes.html http://java.sun.com/docs/books/vmspec/2nd-edition/jvms-proposed-changes.html http://java.sun.com/docs/books/vmspec/2nd-edition/jvms-java5.html - GC http://www.cs.kent.ac.uk/people/staff/rej/gc.html http://java.sun.com/docs/hotspot/gc/ - JNI 1.4 http://java.sun.com/j2se/1.4.2/docs/guide/jni/jni-14.html http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html - LLVM: http://llvm.cs.uiuc.edu/ - MMTk: http://csdl.computer.org/comp/proceedings/icse/2004/2163/00/21630137abs.htm $Id: NOTES,v 1.36 2005/07/03 19:34:18 archiecobbs Exp $