질문:
문자열 리터럴은 일반적으로 인턴된 것으로 간주되므로 쓰레기 수집. 그러나 문자열 연결, 문자열 클래스 캐싱 및 클래스 언로드의 미묘한 차이를 탐색할 때 혼란이 발생합니다. 명확히 하기 위해 다음 질문을 자세히 살펴보겠습니다.
답변:
1. 컴파일 시간 리터럴의 가비지 컬렉션:
컴파일 시간에 정의된 문자열 리터럴은 해당 리터럴이 포함된 코드를 로드한 클래스 로더만큼 오래 유지됩니다. 리터럴을 사용하는 클래스가 로드된 상태로 유지되는 한 이를 나타내는 String 객체는 가비지 수집되지 않습니다. 단, 클래스 로더가 소멸되면 리터럴이 가비지 컬렉션 대상이 될 수 있습니다.
2. intern 메서드 및 가비지 수집:
문자열에 대해 intern 메서드를 호출하면 문자열 리터럴을 나타내는 동일한 개체가 반환됩니다. 따라서 인턴된 문자열은 리터럴 자체와 동일한 수명을 갖습니다. 그러나 문자열 리터럴과 동일하지 않은 new를 사용하여 생성된 문자열은 연결할 수 없는 경우 가비지 수집될 수 있습니다.
3. 클래스 언로드 및 문자열 리터럴:
문자열 클래스가 언로드될 때만 리터럴이 가비지 수집된다는 주장은 올바르지 않습니다. Java는 String 클래스를 포함한 핵심 클래스를 언로드하지 않습니다. 문자열 리터럴은 이를 참조하는 코드가 활성 상태로 유지되는 한 유지됩니다.
위 내용은 문자열 리터럴이 가비지 수집을 수행합니까? 문자열 인터닝과 클래스 언로딩의 미묘한 차이를 탐구합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!