1

Java には、文字列リテラル プールの概念があります。コードで文字列を作成していない場合、このメモリ プールは無駄になります。文字列リテラル プール用に保持する代わりに、このメモリ領域を使用するにはどうすればよいですか。

4

3 に答える 3

2

「文字列リテラルプール」はありません。文字列リテラルはインターンされていますが、これはヒープ上の通常のオブジェクトであることを意味します。それらはおそらく多く参照され、このようにしてメモリを節約しますが、基本的には他のオブジェクトと何ら変わりはありません。

プログラムに文字列リテラルが存在しない場合(そして、呼び出すことはありませんString.intern)、JVMはそのような文字列にヒープメモリを割り当てません。「隠された」メモリ領域は含まれず、「アクセスする」ために何もする必要はありません。

于 2013-02-15T10:56:07.553 に答える
1

意味がないと思います。とにかく、理論的には、文字列プールは Java ヒープの permgen 領域にあります。これは、JVM がクラスを保管するのと同じメモリーです。デフォルトでは (少なくとも Oracle HotSpot JVM の場合) 64 M です。2 つの HotSpot JVM オプション (-XX:MaxPermSize と -XX:PermSize) を使用して、この領域の構成を試みることができます。permgen が少ないほど、オブジェクトのメモリが多くなります。

于 2013-02-15T11:09:44.607 に答える
0

文字列リテラル プール用に保持する代わりに、このメモリ領域を使用するにはどうすればよいですか。

これは、JVM によって予約されている領域であり、プログラムの実行に伴って (あるしきい値まで) 増加します。要するに、それを他の目的に使用することはできません。

于 2013-02-15T10:54:19.113 に答える