問題タブ [string-interning]

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 投票する
11 に答える
10402 参照

java - 同期のデッドロック ( String intern())

私はSun jdk 1.5 ThreadPoolExecutor(24、24,60、TimeUnit.SECONDS、新しいLinkedBlockingQueue())を使用しています。soemtime jdbツールを使用して、スレッドプール内のすべてのスレッドのステータスが「モニターで待機中」であることを確認します。コードは次のとおりです。

"synchronized (key.intern()) " に問題はありますか?


jdb ツールを使用して次の情報を取得します。24 スレッドのステータスは「モニターで待機中」です。これは、24 スレッドが「key.intern()」でデッドロックしていることを意味します。

(java.lang.Thread)0x28 pool-3-thread-2 モニターで待機中

(java.lang.Thread)0x27 pool-3-thread-3 モニターで待機中

(java.lang.Thread)0x1b pool-3-thread-4 モニターで待機中

(java.lang.Thread)0x1a pool-3-thread-5 モニターで待機中

(java.lang.Thread)0x19 pool-3-thread-6 モニターで待機中

(java.lang.Thread)0x18 pool-3-thread-7 モニターで待機中

(java.lang.Thread)0x17 pool-3-thread-8 モニターで待機中 ...

結果は次のとおりです。マルチスレッド環境では、Sting intern() メソッドがデッドロックになる可能性があります。

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

c# - ジェネリックメソッドでの演算子のオーバーロード

このコードスニペットは、深さのC#からのものです

上記のコードスニペットの出力は次のとおりです。

mainメソッドがに変更されたとき

上記のコードスニペットの出力は次のとおりです。

なぜ理解できないのですか?

編集:文字列インターンを理解したら、次の質問は当てはまりません。

AreReferencesEqual2番目のコードスニペット のジェネリックメソッドでパラメーターはどのように受け取られますか?

==演算子がString型のオーバーロードされたEqualsメソッドを呼び出さないように連結すると、文字列型はどう変わりますか?

0 投票する
5 に答える
1669 参照

c# - .NET が既存の文字列を指すのではなく、新しい部分文字列を作成するのはなぜですか?

Reflector を使用して簡単に見るとString.Substring()、各部分文字列にメモリを割り当てているように見えます。これが事実であるというのは正しいですか?文字列は不変なので、それは必要ないと思いました。

私の根本的な目標は、IEnumerable<string> Split(this String, Char)追加のメモリを割り当てない拡張メソッドを作成することでした。

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

c# - Interning 文字列はパーサーでのパフォーマンスに役立ちますか?

解析している場合は、HTML とだけ言いましょう。要素名を読み取ったら、それをインターンすることは有益でしょうか? ここでのロジックは、このパーサーが同じ文字列 (要素名) を何度も解析するということですか? そして、いくつかのドキュメントが解析されます。

仮説:

この質問は、質問string-interning-memoryによって動機付けられました。

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

java - 文字列リテラルでintern()を使用する場合

私はこのようなレガシーコードをたくさん見ます:

Javadocのように、intern()の理由はわかりません。「すべてのリテラル文字列と文字列値の定数式はインターンされています。」おそらく過去の言語の改訂で、これの意図はありますか?

0 投票する
14 に答える
115744 参照

java - 文字列リテラルで文字列のインターンメソッドを使用する必要があるのはいつですか

String#intern()によると、文字列が文字列プールで見つかった場合、internメソッドは文字列プールから文字列を返すことになっています。そうでない場合、新しい文字列オブジェクトが文字列プールに追加され、この文字列の参照が返されます。

だから私はこれを試しました:

s1 and s3 are sames3がインターンされて印刷され、印刷されないことを期待していs1 and s2 are sameました。しかし、結果は次のようになります。両方の行が印刷されます。つまり、デフォルトでは文字列定数がインターンされます。しかし、そうであれば、なぜこのintern方法が必要なのでしょうか。言い換えれば、この方法をいつ使用する必要がありますか?

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

java - Java、HashMaps、および文字列をキーとして使用-文字列値は2回保存されますか?

次のようなHashMapがある場合:

HashMap<String, MyObject>

キーがStringのフィールドであるMyObject場合、この文字列値は2回保存されますか?

したがって、エントリを追加すると、次のようになります。

_myMap.put(myObj.getName(), myObj);

メモリの観点から文字列サイズの2倍を使用していますか?それとも、Javaは舞台裏で何か賢いことをしますか?

ありがとう

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

c# - c#文字列インターン

私は文字列のインターンを理解しようとしていますが、私の例ではなぜうまくいかないようです。この例のポイントは、例1ではメモリに10個の文字列しかないため、使用するメモリが少ない(メモリがはるかに少ない)ことを示しています。ただし、以下のコードでは、両方の例でほぼ同じ量のメモリ(仮想サイズとワーキングセット)を使用しています。

例1があまりメモリを使用していない理由を教えてください。ありがとう

例1:

例2:

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

python - 文字列は Python でプールされますか?

Pythonにはすべての文字列のプールがあり、それらは(文字列)シングルトンですか?

より正確には、次のコードでは、1 つまたは 2 つの文字列がメモリ内に作成されていますか?

0 投票する
6 に答える
2404 参照

c# - ストリングインターン?

2 番目の ReferenceEquals 呼び出しは false を返します。s4 の文字列がインターンされないのはなぜですか? (文字列連結に対する StringBuilder の利点については気にしません。)

私がするときString.Intern(s4);、私はまだ偽になります。

ここでは、s3 と s4 の両方がインターンされていますが、それらの参照は等しくありませんか?