問題タブ [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.
java - PermGen スペースまたはロール マイ オウン インターン メソッドを使用しますか?
特注のワイヤ プロトコルを使用して TCP 経由で送信されたメッセージを処理するコーデックを作成しています。デコード プロセス中に、多数String
の 、 、BigDecimal
および日付を作成します。クライアント/サーバー アクセス パターンは、クライアントがリクエストを発行し、何千ものレスポンス メッセージをデコードすることが一般的であることを意味します 。String
BigDecimal
したがってInternPool<T>
、オブジェクトの各クラスをインターンできるクラスを作成しました。内部的に、プールはWeakHashMap<T, WeakReference<T>>
. 例えば:
私の質問: InternPool
forを使用していますが、PermGen スペースを使用すると思われる'sメソッドの代わりにBigDecimal
for を使用することも検討する必要がありますか? PermGen スペースを使用する利点は何ですか?String
String
intern()
c# - デシリアライゼーションで文字列のインターンをどのように処理すればよいですか?
以下の例では、コンストラクターで文字列をインターンしていますが、これは問題ありません。ただし、バイナリフォーマッタからオブジェクトを逆シリアル化すると、コンストラクタを呼び出す必要があるため、文字列がインターンされるとは思いません。_name 文字列がインターンされていることを確認するにはどうすればよいですか? ...それともインターンされますか?
編集: OnDeserializedAttribute を処理しなくても動作するようです (文字列を正しくインターンします)。それはどのように行うのですか?
以下のメソッドの有無にかかわらず、メモリプロファイラーを使用していますが、それでも文字列をインターンしますか? 魔法?:-/
ありがとう
c# - 文字列インターンのパフォーマンスに関する質問
私は興味がある。シナリオは、たとえば数百の同時接続と1秒あたりの多数(20?)のページ読み込みを伴うWebアプリ/サイトです。
アプリがフォーマットされた文字列をサーバーする必要がある場合
「こんにちは、{0}"はインターンされますか?それとも、それは
インターンに関しては、どちらがより良いパフォーマンスをもたらすでしょう:上記または、
あるいは
だから私の主な質問は次のとおりです:1)string.Formatリテラルはインターンされますか2)クイックルックアップのためにstringbuilderの変数名を設定する価値がありますか、または3)ルックアップ自体はかなり重いですか(上記の#1がいいえの場合) )。
これはおそらくわずかな利益をもたらすだろうと私は理解していますが、私が言ったように私は興味があります。
c++ - リテラルの重複とハードコーディング
次のパターンが非常に頻繁に発生しています。
リテラル文字列が 2 回使用されていることに注意してください。抜粋は nginx ソースベースからのものです。
コンパイラは、コンパイル単位内でこれらのリテラルが検出されたときに、これらのリテラルをマージできる必要があります。
私の質問は次のとおりです。
- 商用グレードのコンパイラ (VC++、GCC、LLVM/Clang) は、コンパイル ユニット内で発生したときにこの冗長性を取り除きますか?
- (静的) リンカは、オブジェクト ファイルをリンクするときにそのような冗長性を取り除きますか?
- 2 が適用される場合、動的リンク中にこの最適化が行われますか?
- 1 と 2 が当てはまる場合、それらはすべてのリテラルに当てはまりますか。
これらの質問は、プログラマーが効率を失うことなく冗長にできるため、重要です。つまり、プログラムに組み込まれている膨大な静的データ モデル (たとえば、低レベルのシナリオで使用される意思決定支援システムのルール) について考えることができます。 .
編集
2 点 / 説明
上記のコードは、認められた「マスター」プログラマーによって書かれています。男は片手でnginxを書きました。
リテラル ハードコーディングの可能なメカニズムのどれが優れているかは尋ねていません。したがって、話題を逸らさないでください。
編集 2
私の元の例は、非常に不自然で制限的でした。次のスニペットは、内部のハードコーディングされた知識に埋め込まれている文字列リテラルの使用法を示しています。最初のスニペットは、構成パーサーがどの文字列にどの列挙値を設定するかを伝えるためのものであり、2 番目のスニペットは、より一般的にプログラム内の文字列として使用されるためのものです。個人的には、コンパイラが文字列リテラルの 1 つのコピーを使用し、要素が静的であるため、グローバル シンボル テーブルに入らない限り、これで満足しています。
密接に続く:
話題にとどまった人たち、ブラボー!
java - Java の String#intern() メソッドはどのように実装されていますか?
String#intern()
Javaのメソッドを見てみましたが、public native String intern();
一般的に、インターンはどのように実施されますか? ストリングの場合は?
java - JavaでString.intern()を使用する実際の実例?
String intern()がどのように機能するかを説明する多くの原始的な例を見てきましたが、それから恩恵を受ける実際のユースケースはまだ見ていません。
私が夢見ることができる唯一の状況は、かなりの量の要求を受け取るWebサービスを持っていることです。それぞれの要求は、厳密なスキーマのために本質的に非常に似ています。この場合、リクエストフィールド名をintern()することで、メモリ消費を大幅に削減できます。
実稼働環境でintern()を使用して大成功を収めた例を誰かが提供できますか?たぶん、人気のあるオープンソース製品での例ですか?
編集:私は手動インターンを参照していますが、文字列リテラルなどの保証されたインターンではありません。
java - Java での文字列比較と文字列インターン
String
いつs をオブジェクトとして比較する必要があり、いつそれらのequals
メソッドを使用する必要がありますか? 念のため、私はいつも を使用していますequals
が、あまり効率的ではないようです。string1 == string2
安全に使用できると確信できるのはどのような状況ですか?
ありがとう!
.net - .Netコードで文字列を手動でインターンするのはいつ良い考えですか?
参照はここにあります:http: //msdn.microsoft.com/en-us/library/system.string.intern.aspx
これはコンパイラによって自動的に行われることが多いようですが、手動で行うこともできます。私が間違っている場合は私を訂正し、これにもう少し光を当ててください。言語がC#、VB.Net、C ++ / CLI、その他であるかどうかは重要ですか?
ありがとう。
java - インターンされた文字列を「フラッシュ」する方法はありますか?
パフォーマンス上の理由から、String.intern()を使用する外部ライブラリを使用しています。それは問題ありませんが、特定の実行でそのライブラリを頻繁に呼び出しているので、恐ろしいことに遭遇します
java.lang.OutOfMemoryError:PermGenスペース
明らかに、JVMコマンドライン-XX:MaxPermSize
修飾子を使用できますが、そのソリューションはあまりスケーラブルではありません。代わりに、定期的に(ライブラリ呼び出しの2つの「バッチ」の間で)インターンされた文字列プールを「フラッシュ」する方法はありますか?つまり、Stringクラスによって保持されている文字列の静的テーブルを空にしますか?
.net - .NET リソース ファイルの文字列はインターンされていますか?
.resx ファイルを使用して固定文字列値を格納する (.aspx ページのコントロールにバインドする) 場合、これらの文字列はインターンされますか?
コンパイラが XML ファイルから文字列を読み取り、コード内のリテラルとして置き換えるため、インターン状態になると思います。
これは正しいです?