메모리 에 저 장 된 자바 문자열 의 위 치 를 자세히 설명 합 니 다.

JDK 6 때 자바 가상 머 신(여기 서 HotSpot 을 가리 키 는 것)에서 메모리 영역 은 로 컬 방법 스 택,가상 머 신 스 택,더미,프로그램 카운터,방법 구역 등 으로 나 뉘 었 고 방법 구역 은 영구 세대 라 고도 불 렸 다.
여 기 는 문자열 의 저장 위치 만 말 합 니 다.자바 가상 컴퓨터 메모리 에 실행 시 상수 탱크 라 는 영역 이 있 습 니 다.방법 구역 의 일부분 입 니 다.JDK 6 에 저 장 된 버 전,필드,방법,인터페이스 등 설명 정보 와 상수 풀,상수 풀 은 컴 파일 기간 에 생 성 된 각종 글자 의 양 과 기호 인용 을 저장 하고 문자열 은 이 위치 에 저 장 됩 니 다.다음은 코드 를 통 해 현상 을 살 펴 보 겠 습 니 다.
이것 은 JDK 6 의 실험 현상 입 니 다.자바 가상 컴퓨터 의 설정 은 다음 과 같 습 니 다.
-XX:PermSize=5M -XX:MaxPermSize=5M -Xms5M -Xmx5M -XX:-UseGCOverheadLimit -verbose:gc
그 의 미 는 방법 구역 의 초기 크기 는 5M 이 고 최대 5M 이다.쌓 기 공간의 초기 크기 는 5M 이 고 최대 5M 이 며 쓰레기 회수 시간 이 차지 하 는 비율 이 높 을 때 오 류 를 보고 하지 않 고 쓰레기 회수 정 보 를 인쇄 할 수 있 습 니 다.

import java.util.ArrayList;
import java.util.List;

public class StringTest {


  static String base = "string";

  public static void main(String[] args) {
    List list = new ArrayList();
    for (int i = 0; i < Integer.MAX_VALUE; i++) {
      String str = base + base;
      base = str;
      list.add(str.intern());
    }
  }

}
실행 오류:
 
영구적 인 세대 즉 방법 구역 의 메모리 넘 침 오 류 를 볼 수 있 습 니 다.여기 서 String API 의 inner 방법 을 사 용 했 습 니 다.처음 만 나 는 문자열 인 스 턴 스 를 영구적 인 세대 로 복사 하고 영구적 인 세대 에서 이 문자열 인 스 턴 스 를 참조 하 는 역할 을 합 니 다.
JDK 7 에서 문자열 이 상수 탱크 에서 제거 되 었 습 니 다.방법 구역 은 취소 되 는 추 세 를 보 입 니 다.JDK 7 환경 에서 가상 컴퓨터 에서 같은 설정 을 사용 하여 상기 코드 를 실행 합 니 다.상황 은 다음 과 같 습 니 다.
 
우리 가 본 정 보 는 자바 가상 컴퓨터 가 넘 쳐 흐 르 는 것 입 니 다.이 를 통 해 JDK 7 에서 문자열 의 저장 위치 가 더미 로 옮 겨 졌 음 을 알 수 있 습 니 다.
JDK 8 환경 에서 같은 가상 컴퓨터 설정 정 보 를 사용 하면 다음 과 같은 오류 가 발생 합 니 다.
 
영구 대 는 JDK 8 에서 제거 됐다 고 지적 했다.
JDK 8 에 새로 나타 난 메모리 영역 은 로 컬 메모리 에 있 는 원 공간 이 라 고 합 니 다.JDK 8 의 가상 컴퓨터 설정 정 보 를 다음 과 같이 수정 합 니 다.
-Xms5M -Xmx5M -XX:MetaspaceSize=5M -XX:MaxMetaspaceSize=5M -verbose:gc
메모리 의 초기 크기 는 5M 이 고 최대 공간 은 5M 이 며 원 공간의 초기 크기 는 5M 이 며 최대 5M 이 며 쓰레기 수 거 정 보 를 인쇄 한 다 는 뜻 이다.
같은 코드 를 만 났 습 니 다.인쇄 된 오류 정 보 는 다음 과 같 습 니 다.
 
메모리 가 넘 치 는 것 을 볼 수 있 습 니 다.여기 서 필 자 는 의문 이 생 겼 습 니 다.인터넷 에서 본 자 료 를 통 해 원 공간 에 넘 쳐 야 하 는 오 류 를 말 했 기 때 문 입 니 다.그러나 필 자 는 실제 테스트 를 통 해 그 보고서 의 오 류 는 아직도 메모리 가 넘 치 는 오류 입 니 다.즉,JDK 8 에서 문자열 의 저장 위 치 는 더미 입 니까?
실험 결 과 는 인터넷 에서 본 것 과 다 르 기 때문에,잠시 여기에 물음 표를 달 았 다.
위 에서 말 한 것 은 소 편 이 소개 한 자바 문자열 이 메모리 에 저 장 된 위 치 를 상세 하 게 통합 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기