I am tired of seeing these hundreds of stack frames from threads in a moderately complex java application at any point. One example is the chain idiom, where a request gets passed around to get things checked/done, is a good candidate for Tail call Optimization and may be Continuation Passing Style makes sense overall, but without functions being first class citizens what to do ? Then there is the Object oriented, abstracted way of viewing the world, often gets abused with un-necessary abstraction, in-correct object modeling, too many indirection to get any work done, further contributing to stack growth.
Any bytecode hackery or compiler optimization to make this happen, looking at Java, I think may be not.
Gosling and to a certain extent Steele did a cardinal mis-service to Programming language community and to a whole generation of programmers by not adopting functional constructs and idioms in Java, considering they are some of the primary innovators in the Lisp community.