>Java >java지도 시간 >Java에서 문자열 리터럴이 가비지 수집됩니까?

Java에서 문자열 리터럴이 가비지 수집됩니까?

DDD
DDD원래의
2024-10-30 02:46:29945검색

 Are String Literals Ever Garbage Collected in Java?

문자열 리터럴의 가비지 컬렉션

Q1: 문자열이 컴파일 타임에 리터럴로 정의된 경우(예: String str = "java"), 가비지 수집되나요?

일반적으로는 그렇지 않습니다. 코드 객체에는 리터럴 String 객체에 대한 참조가 포함되어 있어 접근 가능하게 유지됩니다. 가비지 수집은 코드 객체에 접근할 수 없는 경우에만 발생합니다.

Q2: 인턴 메서드를 사용하는 경우(예: String str = new String("java").intern()) 가비지가 됩니까? 수집됩니까?

반환된 객체는 클래스 로딩 시간에 인턴되는 "java" 문자열 리터럴과 동일합니다. 따라서 가비지 수집되지 않습니다. 그러나 문자열 리터럴과 동일하지 않은 내부 문자열은 연결할 수 없게 되면 가비지 수집될 수 있습니다.

Q3: 문자열 클래스가 언로드될 때만 리터럴이 가비지 수집된다는 것이 말이 됩니까?

아니요. String 클래스는 Java Virtual Machine에 필수적이며 언로드될 가능성이 없습니다. 그렇지 않은 출처는 정확하지 않습니다.

위 내용은 Java에서 문자열 리터럴이 가비지 수집됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.