자바 메모리 할당
일반적으로 자바 는 메모리 할당 시 다음 영역 과 관련 이 있 습 니 다. ◆ 레지스터: 프로그램 에서 제어 할 수 없습니다 ◆ 스 택: 기본 형식의 데이터 와 대상 의 인용 을 저장 하지만 대상 자 체 는 스 택 에 저장 되 지 않 습 니 다.쌓 아 올 리 기 ◆ 쌓 아 올 리 기: new 로 생 성 된 데 이 터 를 저장 합 니 다 ◆ 정적 도 메 인: 대상 에 static 로 정 의 된 정적 구성원 ◆ 상수 풀: 상수 저장 ◆ 비 RAM 저장: 하 드 디스크 등 영구적 으로 저장 공간 자바 메모리 배분 에 있 는 스 택 은 함수 에서 정의 하 는 기본 적 인 유형의 변수 데이터 와 대상 의 인용 변 수 는 함수 스 택 메모리 에 분 배 됩 니 다. 코드 블록 에서 변 수 를 정의 할 때 자바 는 스 택 에서 이 변수 에 메모리 공간 을 할당 합 니 다. 이 변수 가 이 역할 영역 을 종료 하면 자바 는 이 변수 에 분 배 된 메모리 공간 을 자동 으로 방출 합 니 다. 이 메모리 공간 은 즉시 다른 용도 로 사용 할 수 있 습 니 다.자바 메모리 할당 에 있 는 더 미 는 new 가 만 든 대상 과 배열 을 저장 하 는 데 사 용 됩 니 다.더미 에 분 배 된 메모 리 는 자바 가상 컴퓨터 의 자동 쓰레기 회수 기 에서 관리 합 니 다.더미 에 배열 이나 대상 이 생 긴 후에 스 택 에서 특수 한 변 수 를 정의 할 수 있 습 니 다. 스 택 에 있 는 이 변 수 는 배열 이나 대상 이 메모리 에 있 는 첫 번 째 주소 와 같 습 니 다. 스 택 에 있 는 이 변 수 는 배열 이나 대상 의 참조 변수 가 됩 니 다. 인용 변 수 는 배열 이나 대상 을 위 한 이름 과 같 습 니 다. 나중에 프로그램 에서 스 택 에 있 는 인용 변 수 를 사용 하여 쌓 여 있 는 배열 이나 대상 에 접근 할 수 있 습 니 다.인용 변 수 는 배열 이나 대상 을 위 한 이름 에 해당 합 니 다.인용 변 수 는 일반적인 변수 입 니 다. 정의 할 때 스 택 에서 분 배 됩 니 다. 인용 변 수 는 프로그램 이 그 역할 영역 밖으로 실 행 된 후에 방출 됩 니 다.한편, 배열 과 대상 자체 가 더미 에서 분 배 됩 니 다. new 가 배열 이나 대상 을 만 드 는 문 구 를 사용 하 는 코드 블록 을 제외 하고 배열 과 대상 자체 가 차지 하 는 메모리 가 방출 되 지 않 습 니 다. 배열 과 대상 은 인용 변수 가 가리 키 지 않 을 때 스 팸 으로 변 합 니 다. 사용 할 수 없 지만 메모리 공간 을 차지 하고 놓 지 않 습 니 다.그 다음 불확실 한 시간 에 쓰레기 수 거 기 를 치 워 버 렸 다.이것 도 자바 가 비교적 메모 리 를 차지 하 는 원인 이다.실제로 스 택 의 변 수 는 메모리 의 변 수 를 가리 키 는데 이것 이 자바 의 지침 입 니 다! 상수 탱크 (constant pool) 상수 탱크 는 컴 파일 기간 이 확정 되 고 컴 파일 된 class 파일 에 저 장 된 데 이 터 를 말 합 니 다.코드 에 정 의 된 각종 기본 유형 (예 를 들 어 int, long 등) 과 대상 형 (예 를 들 어 String 및 배열) 의 상수 값 (final) 을 포함 하 는 것 외 에 텍스트 형식 으로 나타 난 기호 참조 도 포함한다. 예 를 들 어 ◆ 류 와 인터페이스의 전체 제한 이름 이다.◆ 필드 의 이름과 설명자;◆ 방법 과 이름과 설명자.가상 컴퓨터 는 불 러 오 는 모든 종류의 상수 탱크 를 유지 해 야 합 니 다.상수 탱크 는 이 유형 이 사용 하 는 상수 의 질서 있 는 집합 으로 직접 상수 (string, integer, floating point 상수) 와 다른 유형, 필드 와 방법 에 대한 기호 참조 등 을 포함한다.String 상수 에 대해 서 는 상수 탱크 에 있 습 니 다.JVM 의 상수 풀 은 메모리 에 표 형식 으로 존재 하 며 String 유형 에 대해 고정된 길이 의 CONSTANT 가 있 습 니 다.String_info 표 는 문자 문자열 값 을 저장 하 는 데 사 용 됩 니 다. 주의: 이 표 는 문자 문자열 값 만 저장 하고 기호 참조 만 저장 하지 않 습 니 다.여기까지 말 하면 상수 탱크 의 문자열 값 저장 위치 에 대해 비교적 명확 하 게 이해 할 수 있 을 것 이다.프로그램 이 실 행 될 때 상수 탱크 는 쌓 이지 않 고 Method Area 에 저 장 됩 니 다.더미 와 스 택 자바 의 더 미 는 실행 중인 데이터 영역, 클래스 입 니 다.(대상 은 그 중에서 공간 을 분배 합 니 다. 이 대상 들 은 new, newarray, anewarray, multianewarray 등 명령 을 통 해 만 들 어 졌 습 니 다. 프로그램 코드 로 명시 적 으로 방출 할 필요 가 없습니다. 더 미 는 쓰레기 회수 로 책임 집 니 다. 더 미 는 메모리 크기 를 동적 으로 분배 할 수 있 고 생존 기간 도 컴 파일 러 에 미리 알려 줄 필요 가 없습니다. 실행 할 때 동적 으로 메모 리 를 분배 하 는 자바 의 쓰레기 이기 때 문 입 니 다.수집 기 는 더 이상 사용 하지 않 는 데 이 터 를 자동 으로 받 아들 입 니 다. 그러나 단점 은 실행 할 때 동적 으로 메모 리 를 분배 해 야 하기 때문에 액세스 속도 가 느 립 니 다. 스 택 의 장점 은 레지스터 에 버 금 가 는 액세스 속도 가 빠 르 고 스 택 데 이 터 를 공유 할 수 있 습 니 다. 그러나 스 택 에 존재 하 는 수의 크기 와 생존 기간 은 반드시 확정 되 어야 하 며 유연성 이 부족 합 니 다. 스 택 에는 기본 적 인 저장 소 가 주로 저장 되 어 있 습 니 다.형식의 변수 데이터 (int, short, long, byte, float, double, boolean, char) 와 대상 핸들 (참조)스 택 에 존재 하 는 데 이 터 를 공유 할 수 있 는 중요 한 특수성 이 있 습 니 다. 스 택 에 존재 하 는 데 이 터 를 공유 할 수 있 습 니 다. 만약 에 우리 가 동시에 정의 한다 면: 4. 567913. 컴 파일 러 는 int a = 3 을 먼저 처리 합 니 다. 먼저 스 택 에 변 수 를 a 로 참조 한 다음 에 스 택 에 3 이 값 이 있 는 지 찾 습 니 다. 찾 지 못 하면 3 을 저장 한 다음 에 a 를 3 으로 가리 킵 니 다. 이 어 int b = 3 을 처리 합 니 다. b 를 만 든 안내 입 니 다.변 수 를 사용 하면 스 택 에 3 이라는 값 이 있 기 때문에 b 를 3 으로 직접 가리 키 게 됩 니 다. 그러면 a 와 b 가 동시에 3 을 가리 키 는 상황 이 발생 합 니 다. 이때 a = 4 를 다시 명령 하면 컴 파일 러 는 스 택 에 4 값 이 있 는 지, 없 으 면 4 를 저장 하고 a 를 4 로 가리 키 게 합 니 다. 이미 있 으 면 a 를 이 주 소 를 가리 키 게 합 니 다. 따라서 a 값 의 변 화 는 영향 을 주지 않 습 니 다.b 의 값 입 니 다. 이 데이터 의 공 유 는 두 대상 의 인용 과 동시에 한 대상 을 가리 키 는 이러한 공 유 는 다 릅 니 다. 이러한 경우 a 의 수정 은 b 에 영향 을 주지 않 기 때문에 컴 파일 러 에 의 해 이 루어 집 니 다. 공간 을 절약 하 는 데 유리 합 니 다. 한 대상 의 인용 변 수 는 이 대상 의 내부 상 태 를 수정 하여 다른 대상 의 인용 변 수 를 영향 을 줄 수 있 습 니 다.
총결산
스 택 에 원본 데이터 형식의 부분 변수 데이터 와 대상 의 참조 (String, 배열, 대상 등) 를 저장 하지만 대상 내용 은 저장 하지 않 습 니 다.
new 키 워드 를 사용 하여 만 든 대상 을 저장 합 니 다.
문자열 은 특수 포장 류 입 니 다. 인용 은 스 택 에 저장 되 어 있 으 며, 대상 내용 은 생 성 방식 에 따라 다 릅 니 다 (상수 탱크 와 더미). 어떤 것 은 컴 파일 기간 이 만 들 어 졌 고, 문자열 상수 탱크 에 저장 되 어 있 으 며, 어떤 것 은 실 행 될 때 만 생 성 됩 니 다. new 키 워드 를 사용 하여 더미 에 저장 합 니 다.
Gavin
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.