クラスローダってバイトコード読んでクラスをロードするから、
その読まれたバイトコードの機械語に相当する部分がJVMヒープ外のコードキャッシュ領域に保持されるって認識だったんだけど違ってるんかな

フィールド値の String は、ヒープの中の String Constant Pool って領域があってそこに確保されてる(String.intern() とかで確認できる)
というのはとりあえず基本的なこととして

メソッドの中のローカル変数の String は、メソッドがコールスタックに存在する時は当然JVMスタックに存在してるだろうけど、
メソッドがコールスタックにない時は、どうなってるのかなと
呼ばれた時に割り当てられるのか、クラスがロードされてれば呼ばれてないときもメモリが確保されてるのか

あと、すまんが例の人はすぐNGにするからそっちにレスしても見えんかも