자바 문자열 풀
3938 단어 jvmjava100daysofcodestring
다음 코드를 참조하십시오.
public class StringPoolDemo{
public static void main(String[] args){
String a = "hello";
String b = "hello";
}
}
및 b 문자열 프리미티브는 모두 동일합니다. 따라서 힙에 두 개의 문자열 객체를 생성하지 않고도 JVM은 하나의 문자열만 생성하고 두 참조 변수를 동일한 문자열 객체에 연결할 수 있습니다. 이 경우 힙의 문자열 풀이라고 하는 특수 메모리 영역 내에 문자열 개체가 생성됩니다.
이 문자열 풀은 큰 해시 맵입니다. 모든 문자열은 해시 맵의 요소로 저장됩니다.
그러나 생성자를 사용하여 문자열을 생성하는 경우에는 이야기가 약간 다릅니다. 그 때 문자열은 기본이 아닌 객체로 동작하기 때문입니다. 따라서 힙 내부에 string 객체가 생성됩니다. 문자열 풀에 없습니다.
또한 String.intern() 함수를 사용하여 문자열을 문자열 풀 메모리 영역에 수동으로 추가할 수 있습니다.
public class StringPoolDemo{
public static void main(String[] args){
String s = "hello world";
s.intern();
}
}
이 코드를 실행할 때 s는 문자열 풀 메모리에 저장됩니다.
이것을 테스트하기 위해 몇 가지 코드를 작성해 봅시다.
public class StringPoolDemo{
public static void main(String[] args){
String a = "hello";
String b = "hello";
System.out.println(a.equals(b)); // true
System.out.println(a == b); // true
}
}
두 출력 모두에서 출력으로 true를 얻습니다. 따라서 와 b 모두 동일한 문자열 객체를 참조한다고 말할 수 있습니다.
-XX:+PrintStringTableStatistics JVM 플래그를 사용하여 JVM 문자열 풀에서 사용 가능한 버킷 수와 사용 중인 버킷 수를 확인할 수 있습니다.
애플리케이션에 많은 수의 문자열 프리미티브가 있는 경우 -XX: StringTableSize=를 사용하여 문자열 풀 크기를 늘려 상당한 효율성을 얻을 수 있습니다.
최상의 성능을 위한 값으로 소수를 사용해야 합니다.
Reference
이 문제에 관하여(자바 문자열 풀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/buddhikac96/java-string-pool-2j56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)