I'm returning to this thread very late. Sorry.
That just doesn't work on 6502 hardware level...
Sure it does. The x86 is no more magical an instruction set than the 6502 is (more registers, wider widths, but otherwise a Von Neumann architecture all the same), and Oberon works just fine there.
And even if we use type descriptors, the stack frame on a 6502 can have very different sizes, depending on the execution flow - as the 6502 stack is often used as intermediary storage in conditional expressions, as there are so few registers.
Smalltalk shows that these can be predicted and accounted for in the activation frame of a procedure.
read and write barriers have been greatly improved in Java as well, and are, on modern CPUs, supported by hardware! A write barrier flushes the dirty pages from cache to memory (everything written before the barrier is stored in actual memory, not in cache), a read barrier throws the cache away (everything read after the barrier comes from memory)
These are not read- or write-barriers. You're describing synchronization points.
A read-barrier is a small clip of code responsible for translating a reference to a machine-readable address, which must be used (in the worst case) at each and every read site. It can be as simple as "@ @" in Forth (e.g., a double fetch) to resolve a handle to the object pointed to by the handle.
Likewise, a write-barrier is a small piece of code which is responsible for somehow marking an object as having been modified, so that a garbage collector will know to traverse its pointers anew, instead of caching the GC state from a previous pass (why re-traverse a tree when it's dynamically known to not have changed since the last time you checked?).
These barriers have nothing to do with cache coherency or thread synchronization.
Indeed, flushing the caches on every read or write in a GC'ed language will utterly
destroy performance. Caches exist precisely because the CPU core speed is often at least a factor of 10 (often a factor of 1000!!) faster than bus speed.
P.S.: I'm a Java architect for a living, so I might be biased....
I feel so sorry for you. You must hate life.
Whenever I have to deal with Java, I know I hate life.