javaの文字列内部を調べた後、私は "パーマスペース"と呼ばれるものについて混乱しました。当初の私の理解は、String
リテラルと、this questionで説明されているようなクラスのメタデータを保持していたということでした。内部文字列、文字列プール、およびパーマネントスペースのガベージコレクション
私はString.intern()
メソッドについても読んでおり、String
を文字列プールに配置して、その一意のインスタンスへの参照を返します。これは、JVMのパーマネントスペースに存在する文字列リテラルを保持するのと同じ文字列プールであると私は理解しています。 「パーマスペース」が変更可能であるとは思われませんでした(それは結局永久的です、はい?)。しかし、その後、私が見つけたトップが受け入れ答えにEJPによってコメントを投票this questionは
Intern'd文字列は、現在かなりの数年のためにGC-ことができたと説明しています。
GCが非常に永久的に見えないパーマスペースで動作することを意味します。これはどうやって調和するのですか? GCはパーマスペースのすべてをチェックしますか? GCはソースからの文字列リテラルを含む文字列プール内のすべてをチェックしますか?インターナショナルな文字列のための2番目の文字列プールがありますか? GCは、収集する際にインターナショナル・ストリングを見渡すだけのことを知っていますか?あるいは、このコメントが間違っていて、文字列をインターナショナルにすることで、GC'dができなくなってしまいます(私はそうではないと思います)?