問題タブ [string-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4231 参照

java - String s = new String("abc") メモリ割り当て

これにより、ヒープに新しい String オブジェクトが作成されることはわかっています。しかし、キャシー・シエラによる SCJP の本の声明については混乱しています。

上記のステートメントはヒープにオブジェクトを作成し、同時に文字列「abc」が文字列プールに存在しない場合は、文字列プールに「abc」も追加すると述べています。

上記の場合、オブジェクト「abc」も文字列プールに作成されているかどうか教えてください。

0 投票する
1 に答える
365 参照

java - 文字列と Permgen メモリ

ファイルに保存された Map 形式のマップがあります。このファイルには 100,000 を超えるレコードがあります。

各エントリの値はほぼ 10k です。

1000 レコードをメモリ内のマップにロードして処理し、マップをクリアして次の 1000 レコードをロードします。

私の質問は:

  1. 文字列は permgen メモリ領域にある文字列プールに格納されるため、マップをクリアすると、文字列はガベージ コレクションされますか?

  2. それらがガベージコレクションされていない場合、ガベージコレクションを強制する方法はありますか?

  3. プログラムのメモリが不足している場合、JVM が OutOfMemory Exception をスローする前に permGen メモリを消去するという保証はありますか?

0 投票する
2 に答える
943 参照

java - String オブジェクトが変更された場合の Java String Immutability ストレージ

文字列がリテラルで初期化された場合、文字列プールにスペースが割り当てられ、新しいキーワードで初期化された場合、文字列のオブジェクトが作成されることを理解しました。しかし、私は以下に書かれているケースと混同しています。

私の質問は、 String が new キーワードで作成され、その値がリテラルで更新された場合はどうなるでしょうか?

例えば

次に、次のステートメントを次のように書いたらどうでしょうか。

だから私の質問は、

1 文字列プールに文字列リテラルを作成しますか、それともそのオブジェクトの値を更新しますか?

2 String プールに新しいリテラルを作成すると、現在存在するオブジェクトはどうなりますか? それは破棄されますか、それともガベージコレクターが呼び出されるまで存在します。

文字列が数千文字の場合、これは小さな文字列であり、使用するスペースが心配です。ですから、私の重要な質問はスペースです。

リテラルを割り当てた後、すぐにヒープからスペースを解放しますか?

最初のステートメントから 2 番目のステートメントまでの値と、メモリ領域 (ヒープと文字列プール) に何が起こるかを誰でも説明できますか?

0 投票する
1 に答える
115 参照

java - ランタイム定数プール GC コレクション

GC はランタイム定数プールで実行されますか?

はいの場合、いつですか?いいえの場合、文字列プールが文字列リテラルでいっぱいになったらどうなりますか?

私はグーグルで検索しましたが、この問題に関連するものは見つかりませんでした。私のマシンのプログラムでも試しました。

0 投票する
7 に答える
4206 参照

java - この Java コード スニペットはどのように機能しますか? (ストリングプールとリフレクション)

Java 文字列プールをリフレクションと組み合わせると、Java で想像を絶する結果が生じる可能性があります。

上記のコードは以下を出力します:

マリオはどうした?

0 投票する
7 に答える
3254 参照

java - new キーワードを使用して文字列を作成するたびに jvm が新しい文字列オブジェクトを作成する理由

jvmメモリの最適化のために作成する場合、キーワードstring poolを使用して文字列を作成するたびに新しいオブジェクトが作成されるのはなぜですか?newstring pool

0 投票する
4 に答える
696 参照

java - JAVA:いくつのオブジェクトが作成されますか? なぜ?

調べていたらSCJP、一冊の本に一行見つけました。

そして、上の行に2つのオブジェクトが作成されると書かれていました。ワンオンHEAPとワンオンSTRING POOL

私はそこで与えられた宣言に満足していません。2 つのオブジェクトが作成される理由を誰かに理解してもらえますか?

前もって感謝します。