問題タブ [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.
java - mybatis varchar が Java の文字列プールに入らないようにするにはどうすればよいですか?
データベースには、Java 文字列プールに入らないようにする必要がある機密フィールドがいくつかあります。データベースではすべて VARCHAR であり、コードで StringBuilders を使用して、それらが定数プールに入れられないようにします。
MyBatis を使用してデータベースと対話します。現在、setObject を使用して StringBuilder を Varchar にマップしようとしているタイプハンドラーを実装しようとしています。
これが可能かどうか疑問に思っています。可能であれば、MyBatis と JDBC の間に、VARCHAR が String プールに収まらないことを保証できないことを意味する他の領域がありますか? (コード内のキャスト、文字列としてのステートメント、そのようなもの)
mybatis-users Google グループでも質問しましたが、これまで誰も助けてくれませんでした
編集 - これは厳密には文字列プールに関するものではなく、データがヒープ上のどこにあるかを制御し、null で上書きすることによって可変 CharSequence からデータをできるだけ早く消去することであることを明確にする必要があります。文字列をプールに入れることは絶対にできませんが、プールにない文字列を null にするだけで、ガベージ コレクションの仕組みが原因でセキュリティの問題が発生する可能性があります。
java - JVM 文字列プール スレッドはローカルですか? このユースケースで何か問題が発生しますか?
インターネット上の多くの記事はString.intern()
、マルチスレッドでの使用が悪いことを示していますが、なぜそれが悪いのか本当に理解できませんでした。使用するとString.intern()
、常に文字列プールから一意の文字列が返されますね。そうでない場合は、JVM 文字列プール スレッドはローカルですか? そうでない場合String.intern()
、マルチスレッド環境での同期に使用することが悪いと見なされるのはなぜですか? したがって、次の使用例では、同期の問題は解決しないでしょうか:
ここでは、1 つの共通の文字列 ID に基づいて両方のメソッドを同期しています。メソッド全体を 1 つのトランザクションとして実行したい (他のメソッドがデータベースを読み取れないようにする)。しかし、データベース レベルでこれを行うと、デッドロックが発生します (読み取りアクセスを妨げない)。この場合、string intern を使用して同期すると、ボトルネックやデッドロックの問題が発生しますか? 問題を解決するための他のアプローチはありますか? ご不便やフォーマットの悪さをお許しください。
java - intern() メソッドの後で 2 つの等しい文字列を比較する
Javadoc によると、文字列プールに等しい文字列がある場合、intern() メソッドはその文字列を返します。
どちらの場合も真実になると思っていました。
java - 文字列プールと文字列[]
このトピックに関していくつか質問がありますが、理解するのに役立つかもしれません
文字列リテラルとは異なり、文字列配列からの文字列が自動的にスティングプールに移動しないという事実の背後にあるログインは何ですか?
文字列リテラルのみが暗黙的に文字列プールに移動することを正しく理解していますか?
public static void main ( public static void main(String[] args) )からの文字列配列も文字 列プールに移動しないことを正しく理解していますか?