Java String Poolとは?
Stringには2つの生成方式があり、それぞれ異なる.新しい演算子を使用
NewでStringを作成すると、Heap領域に存在します. 文字
String constant poolという分野が存在します. new演算子を使用してStringを宣言する方法と、文字を使用する方法の違いについて説明します.
String Returnalを使用して作成すると、このString値はHeap領域内のString Constant Poolに格納されて再使用されますが、new演算子を使用して作成すると、同じ内容でも複数のオブジェクトがそれぞれHeap領域を占有します.
heap領域には「cat」、「dog」と同じ値が含まれ、図の右側から重要な違いがわかります. String文字で生成されたオブジェクトはString Poolに入ります. Stringテキストで生成されたオブジェクトの値(「Cat」)がString Poolに既に存在する場合、そのオブジェクトはString Poolの参照を参照します.(図中のs 1とs 2は同じ場所を指す) new演算子によって生成されたStringオブジェクトは、String Poolに同じ値が既に存在している場合でも、Heap領域内の個別のオブジェクトを指します.
Stringをliteralと宣言すると、内部でStringのintern()メソッドが呼び出されます.intern()メソッドが、指定した文字列が文字列定数プールに存在するかどうかを検索している場合は、アドレス値を返します.存在しない場合は、文字列定数プールに格納し、新しいアドレス値を返します.
String Constants Poolの保存と使用をString Interingと呼びます.このように、String Interingに記憶されているString値は不変である.不変性を持つということは,値は不変であり,同じString値を持つと同じ場所を指す.
Java 6までstring constant poolの位置はPermエリアであり、Java 7ではOOM問題によりHeapエリアに変更される.
Perm領域は固定サイズであり,Runtimeではサイズが拡張しない.
Java 6までは、OutOfMemoryExceptionを生成し、一部を制御できないため、Stringを呼び出すintern()メソッドはほとんど使用されていません.
したがって、Oracleのエンジニアは、文字列定数プールの場所をJava 7からPerm領域ではなくHeap領域に変更し、String定数プールのオブジェクトがGCのターゲットになります.詳細については、ここです。を参照してください.
https://starkying.tistory.com/entry/what-is-java-string-pool?category=689625
https://medium.com/@joongwon/string-%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0-57af94cbb6bc
https://starkying.tistory.com/entry/what-is-java-string-pool
NewでStringを作成すると、Heap領域に存在します.
String constant poolという分野が存在します.
Java String Pool
String Returnalを使用して作成すると、このString値はHeap領域内のString Constant Poolに格納されて再使用されますが、new演算子を使用して作成すると、同じ内容でも複数のオブジェクトがそれぞれHeap領域を占有します.
public static void main(String... args) {
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
String s4 = "Dog";
//객체의 주소값을 비교
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
//equals는 문자열을 비교하기 때문에 true
System.out.println(s1.eqauls(s3)); // true
}
heap領域で作成されたStringオブジェクトとstring constant poolに文字で格納されたStringオブジェクトのアドレス値は必然的に異なります.heap領域には「cat」、「dog」と同じ値が含まれ、図の右側から重要な違いがわかります.
String interning
Stringをliteralと宣言すると、内部でStringのintern()メソッドが呼び出されます.intern()メソッドが、指定した文字列が文字列定数プールに存在するかどうかを検索している場合は、アドレス値を返します.存在しない場合は、文字列定数プールに格納し、新しいアドレス値を返します.
String Constants Poolの保存と使用をString Interingと呼びます.このように、String Interingに記憶されているString値は不変である.不変性を持つということは,値は不変であり,同じString値を持つと同じ場所を指す.
String Constant poolとは?
Java 6までstring constant poolの位置はPermエリアであり、Java 7ではOOM問題によりHeapエリアに変更される.
Perm領域は固定サイズであり,Runtimeではサイズが拡張しない.
Java 6までは、OutOfMemoryExceptionを生成し、一部を制御できないため、Stringを呼び出すintern()メソッドはほとんど使用されていません.
したがって、Oracleのエンジニアは、文字列定数プールの場所をJava 7からPerm領域ではなくHeap領域に変更し、String定数プールのオブジェクトがGCのターゲットになります.詳細については、ここです。を参照してください.
Reference
https://starkying.tistory.com/entry/what-is-java-string-pool?category=689625
https://medium.com/@joongwon/string-%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0-57af94cbb6bc
https://starkying.tistory.com/entry/what-is-java-string-pool
Reference
この問題について(Java String Poolとは?), 我々は、より多くの情報をここで見つけました https://velog.io/@jeb1225/JAVA-String-Poolテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol