文字列プール内のオブジェクトの有効期間は、他のオブジェクトと同じ規則によって管理されます。オブジェクトは到達可能である限り存在し続けます。到達不能になった後、しばらくすると回収されます。
クラスのリテラルに対応する String オブジェクトが「異なる」唯一の点は、クラスのコードを介してオブジェクトに到達できることです。通常、クラスのコードの存続期間は JVM の存続期間です。ただし、クラスが動的にロードされた場合、それをロードしたクラスローダーを到達不能にするなどすると、クラスが到達不能になり、リテラル オブジェクトが到達不能になる可能性があります。
StringPool のその変数の寿命を知りたいだけです。アプリケーションレベルかJAVA環境レベルか。
「アプリケーション レベル」と「Java 環境レベル」が何を意味するのかは明確ではありませんが、通常の状況では、実行中のアプリケーションの寿命は JVM の寿命と同じです。いずれにせよ、到達可能性分析によってすべてが決定されます。つまり、GC がオブジェクトを計算で使用できるかどうかを判断するために使用する「トレース」プロセスです。
実際、あなたの質問のこのステートメントは間違いなく間違っています。
JVM が String 変数を別の StringPool に格納することはわかっています。
実際、Java 7 では、文字列プールは実際には permgen ヒープではなく、通常のヒープに格納されます。(さらに、あなたは本当に文字列変数ではなく文字列オブジェクトを意味します。オブジェクトと変数はまったく同じものではありません...)