머리말
나는 JVM 메모리 지역의 부서에 관한 기사를 썼지 만 어제 Ant Financial과의 인터뷰를 받았습니다. JVM 관련 콘텐츠에 대해 물었고 JVM 메모리 영역의 부서를 설명했습니다. 이 부분은 꽤 좋았지 만 나중에 String이 Java에 저장되는 곳을 물었습니다. 나는 문자열이 변하지 않는 수량이라는 것을 기억했다. 그러나 나중에 나는 새 줄을 어디에 놓아야하는지 물었다. 나중에 나는 문자열 참조가 어디에 있는지 물었다. 그 당시 나는 어리석은 일이었고 그들이 힙에도 배치되었다고 말했다. 이제 요약하겠습니다. 기본 유형 변수 데이터 및 객체 참조는 스택에 배치되고 객체 자체가 힙에 배치되고, 명시적인 문자열 상수가 일정한 풀에 배치되고, 문자열 객체가 힙에 배치됩니다.
상수 수영장에 대한 설명
상수 풀은 이전에 방법 영역, 즉 영구적 인 세대에 있었고 JDK7에서 시작하는 힙으로 이동했습니다. 이 변경은 Oracle의 릴리스 버전의 JDK 7 노트에서 다루어진 ** 중요한 RFE에서 볼 수 있습니다.
지역 : Hotspotsynopsis : JDK 7에서는 내부 문자열이 더 이상 Java 힙의 영구 생성에 할당되지 않고 대신 적용에 의해 생성 된 다른 물체와 함께 Java Heep (젊은 세대라고 함)의 주요 부분에 할당됩니다. 이 변경으로 인해 주 Java 힙에 더 많은 데이터가 있고 영구 생성에서 데이터가 줄어들므로 힙 크기를 조정해야 할 수도 있습니다. 대부분의 응용 프로그램은 이러한 변경으로 인해 힙 사용이 상대적으로 작은 차이 만 볼 수 있지만 많은 클래스를로드하거나 String.intern () 메서드를 많이 사용하는 더 큰 응용 프로그램이 더 큰 차이를 볼 수 있습니다 .RFE : 6962931
문자열 메모리 위치 설명
1. 명시 적 문자열 상수
문자열 a = "holten"; 문자열 b = "holten";
• 첫 번째 문장 후, 홀텐 값이있는 문자열 객체가 상수 풀에서 생성됩니다.
• 두 번째 문장이 실행되면 상수 풀에 Holten이 있기 때문에 새 문자열 객체가 더 이상 생성되지 않습니다.
• 현재 문자열에 대한 참조는 가상 머신 스택에 있습니다.
1. 스트링 객체
문자열 a = new String ( "holtenobj"); 문자열 b = 새 문자열 ( "holtenobj");
• 클래스가로드되면 holtenobj의 값이있는 문자열 객체가 상수 풀에서 생성됩니다. 첫 번째 문장이 실행되면 새 문자열 ( "holtenobj") 객체가 힙에 생성됩니다.
• 두 번째 문장이 실행되면 Holtenobj가 상수 풀에 존재하기 때문에 새 문자열 객체가 더 이상 생성되지 않으며 새 문자열 ( "HoltenoBj") 객체가 힙에 직접 생성됩니다.
확인하다
/*** 2016/8/16에 Holten.gao가 작성했습니다. */public class main {public static void main (String [] args) {String str1 = "gao xiaotian"; 문자열 str2 = "gao xiaotian"; System.out.println (str1 == str2); // true String str3 = new String ( "gao datian"); 문자열 str4 = 새 문자열 ( "gao datian"); System.out.println (str3 == str4); // false}}반품 결과 :
Truefalse
위의 기사는 Java의 문자열 메모리 위치에 대한 자세한 설명을 기반으로합니다. 내가 당신과 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.