문자열 리터럴의 가비지 컬렉션
Q1: 문자열이 컴파일 타임에 리터럴로 정의된 경우(예: String str = "java"), 가비지 수집되나요?
일반적으로는 그렇지 않습니다. 코드 객체에는 리터럴 String 객체에 대한 참조가 포함되어 있어 접근 가능하게 유지됩니다. 가비지 수집은 코드 객체에 접근할 수 없는 경우에만 발생합니다.
Q2: 인턴 메서드를 사용하는 경우(예: String str = new String("java").intern()) 가비지가 됩니까? 수집됩니까?
반환된 객체는 클래스 로딩 시간에 인턴되는 "java" 문자열 리터럴과 동일합니다. 따라서 가비지 수집되지 않습니다. 그러나 문자열 리터럴과 동일하지 않은 내부 문자열은 연결할 수 없게 되면 가비지 수집될 수 있습니다.
Q3: 문자열 클래스가 언로드될 때만 리터럴이 가비지 수집된다는 것이 말이 됩니까?
아니요. String 클래스는 Java Virtual Machine에 필수적이며 언로드될 가능성이 없습니다. 그렇지 않은 출처는 정확하지 않습니다.
위 내용은 Java에서 문자열 리터럴이 가비지 수집됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!