> Java > java지도 시간 > Java에서 String.intern() 메소드의 기능은 무엇입니까?

Java에서 String.intern() 메소드의 기능은 무엇입니까?

WBOY
풀어 주다: 2023-05-23 17:10:06
앞으로
1459명이 탐색했습니다.

String.intern 원리

String.intern():
이 메서드는 Native 메서드입니다
기본 메서드는 C++의 StringTable::intern 메서드를 호출하여 구현됩니다.

intern() 메서드가 str 문을 통해 호출되는 경우. intern()
JVM 현재 클래스의 상수 풀에서 str과 같은 값의 문자열이 있는지 검색합니다
존재하면 해당 Strnig의 참조를 상수 풀에 직접 반환합니다
없으면 존재하면 상수 풀에 동등한 문자열이 생성됩니다
그런 다음 상수 풀에서 이 문자열의 참조를 반환합니다
------------ --------------- ----------
따라서 동일한 문자열 객체인 한
, intern() 메소드를 사용하면 상수 풀에 동일한 String 참조가 반환됩니다.
따라서 이러한 동등한 String 객체는 intern() 뒤에 ==를 사용하여 일치할 수 있습니다.

String.intern() in JDK6

상수 풀 Jdk6에서는 PermGen(영구 세대)에 위치합니다.
PermGen은 주요 로드된 클래스 정보 및 문자열 풀을 저장하는 데 사용되는 고정 크기 영역
------- ------------ ------------------------- ----
intern() 메서드를 실행할 때
상수 풀에 동등한 문자열이 없으면 JVM은 상수 풀에 동등한 문자열을 생성하고
해당 문자열에 대한 참조를 반환합니다
또한 JVM은 사용된 문자열 컬렉션의 상수 풀에 이전 복사본을 자동으로 저장합니다
Jdk6에서 intern() 메서드를 사용할 때의 주요 문제점은 상수 풀이 PermGen(영구 생성)에 저장된다는 것입니다

참고:
우선 PermGen은 고정된 크기의 영역이며 일반적으로 플랫폼이 다릅니다. PermGen의 기본 크기도 다릅니다.
대략 32M에서 96M 사이입니다.
따라서 제어되지 않는 런타임 문자열(예: 사용자 입력 정보 등)에는 intern() 메서드를 사용할 수 없습니다.
그렇지 않으면 PermGen 메모리 오버플로가 발생할 가능성이 높습니다.
두 번째로 String 객체는 Java 힙에 저장됩니다. Java 힙 영역은 PermGen이 물리적으로 격리되어 있는 것과 동일합니다.
따라서 여러 개의 서로 다른 문자열 객체에 대해 인턴 작업을 수행하면
메모리에 중복된 문자열이 많아져 성능 손실이 발생합니다

JDK7의 String.intern()

Jdk7은 상수 풀을 PermGen 영역에서 Java 힙 영역으로 이동했습니다.
인턴 작업을 실행할 때
문자열이 상수 풀에 이미 존재하는 경우 문자열 참조가 직접 반환됩니다.
그렇지 않으면, 문자열 객체의 참조가 상수 풀에 복사되고 반환됩니다
힙 영역의 크기는 일반적으로 제한되지 않으므로 상수 풀을 PremGen 영역에서 힙 영역으로 이동하면 상수 풀 사용이 더 이상 제한되지 않습니다. 고정된 크기
또한 힙 영역에 위치한 상수 풀의 객체는 가비지 수집될 수 있습니다
상수 풀의 문자열에 더 이상 이를 가리키는 참조가 없으면 JVM은 문자열을 재활용합니다
다음을 사용할 수 있습니다. XX:StringTableSize 문자열 풀의 맵 크기를 설정하는 가상 머신 매개변수
문자열 풀의 내부 구현은 HashMap입니다
따라서 프로그램에서 인턴이 필요한 문자열 수를 결정할 수 있을 때
문자열의 크기를 설정할 수 있습니다. 필요한 숫자 * 2에 매핑합니다(해시 충돌 감소)
이 방법으로 String.intern()만 만들 수 있습니다. 일정한 시간이 필요하며
문자열 풀에 문자열을 저장하는 데 꽤 작은 메모리가 필요합니다.
String.intern()의 함수 방법:
해당 기능은 문자열을 상수 풀에 수동으로 넣는 것입니다

위 내용은 Java에서 String.intern() 메소드의 기능은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿