2016-05-31 4 views
1

인라인으로 생성되어 메소드로 전달 된 객체의 수명은 어떻게됩니까? 예를 들어 :Java 인라인 객체가 매개 변수 수명으로 전달됨

문자열 "안녕하세요"
myMethod(new String("Hello World")); 

생성 및 파괴 단지 MyMethod라는 실행 후 또는 가비지 콜렉터가 제거 될 때까지 여전히 메모리에 남아?

답변

6

JAVA는 문자열 리터럴을 다르게 처리합니다. 여기 값이 "Hello World"인 String 객체가 문자열 상수 풀에 생성됩니다.

그리고 Constant Pool에서이 리터럴의 수명은 JVM에 의해 결정됩니다. 이는 JVM이 가비지 수집 할시기를 결정한다는 것을 의미합니다 (Constant 풀에 더 이상 메모리가 없기 때문에이 객체는 참조로 참조되지 않습니다.)).

그러나 메소드 실행 직후에는 파기되지 않습니다. 당신이 전역 변수에 할당하지 않는 한 http://www.thejavageek.com/2013/06/19/the-string-constant-pool/

+0

고마워요! 그래서 다른 메서드에서 String 개체를 얻으면 String Constant Pool에 의해 관리됩니까? 예 : myMethod (getKey()); "getKey()"는 키/암호의 문자열 표현을 반환하는 메서드입니다. – darkalbo

+0

JAVA String Literal은 ""을 사용하여 생성되며, String 객체는 new 키워드를 사용하여 생성됩니다. 리터럴은 String Constant Pool에 보관되고 String 객체에는 Constant 풀에 리터럴이 하나 생성되고 힙에 하나의 리터럴이 생성되고 객체 참조는 힙에있는 객체를 가리 킵니다. –

0

임 확신 그것은 단지 방법이 존재합니다 :

여기에 문자열 상수 풀에 대한 자세한 내용을 확인할 수 있습니다.