Java Virtual Machine 메모리 프로토타입 예제에 대한 자세한 설명
Java 가상 머신 메모리 프로토타입의 6개 부분:
1. 레지스터: 프로그램에서 제어할 수 없습니다.
2. 스택: 기본 유형의 데이터와 객체에 대한 참조를 저장하지만 객체 자체는 스택에 저장되지 않습니다. , 그러나 힙에 저장됨
3. 힙: new
을 사용하여 생성된 데이터를 저장합니다. 4. 정적 도메인: 정적
을 사용하여 개체에 정의된 정적 멤버를 저장합니다. 5. 상수 풀: 상수를 저장합니다.
6. RAM이 아닌 저장소: 하드디스크 등 영구 저장공간
Java 메모리 할당의 스택
스택의 기본 단위는 프레임(또는 스택 프레임)입니다. Java 스레드가 실행될 때마다 Java 가상 머신은 Java 스택을 할당합니다. 실. 스레드가 특정 Java 메소드를 실행할 때 프레임을 Java 스택에 푸시합니다. 이 프레임은 매개변수, 지역 변수, 피연산자, 중간 연산 결과 등을 저장하는 데 사용됩니다. 이 메서드의 실행이 완료되면 프레임이 스택에서 팝됩니다. 변수가 코드 블록에 정의되면 Java는 변수가 범위를 벗어날 때 변수에 대한 메모리 공간을 스택에 할당합니다. Java는 변수에 할당된 메모리 공간을 자동으로 해제하고 메모리 공간을 즉시 사용할 수 있습니다. 다른 목적으로 사용됩니다. 하지만 작업할 때 다음 사항에 주의해야 합니다.
1. Java 스택의 모든 데이터는 비공개이며 다른 스레드는 이 스레드의 스택 데이터에 액세스할 수 없습니다.
2. 모든 개체가 저장되고 각 개체에는 해당 클래스에 대한 정보가 포함됩니다(클래스의 목적은 작업 지침을 얻는 것입니다). 3. JVM에는 모든 스레드에서 사용되는 하나의 힙 영역(힙)만 있습니다. , 기본 유형 및 객체 참조는 힙에 저장되지 않고 객체 자체와 배열 자체만 저장됩니다.
Java 메모리 할당의 힙
Java 가상 머신의 힙은 객체와 배열을 저장하는 데 사용됩니다. new로 생성된 배열. 힙에 할당된 메모리는 JVM(Java Virtual Machine)의 자동 가비지 수집 메커니즘에 의해 관리됩니다.
간단히 말해서 스택에 비해 힙은 주로 Java 객체를 저장하는 데 사용되며, 스택은 주로 객체 참조를 저장하는 데 사용됩니다. 힙에 배열이나 객체가 생성된 후에는 특수 항목을 정의할 수도 있습니다. 스택의 개체 변수, 스택의 이 변수 값이 힙 메모리의 배열 또는 개체의 첫 번째 주소와 같도록 하고 스택의 이 변수는 배열 또는 개체의 참조 변수가 됩니다. 참조 변수는 배열이나 개체에 이름을 지정하는 것과 같습니다. 그런 다음 스택의 참조 변수를 사용하여 프로그램의 힙에 있는 배열이나 개체에 액세스할 수 있습니다. 참조 변수는 배열이나 객체에 이름을 지정하는 것과 같습니다.
Java의 힙은 클래스 객체가 공간을 할당하는 런타임 데이터 영역입니다. 이러한 객체는 new, newaray, anewarray 및 multianewarray와 같은 명령을 통해 생성되며 힙을 명시적으로 해제할 필요가 없습니다. 힙의 장점은 메모리 크기를 동적으로 할당할 수 있다는 점이며 런타임에 메모리를 동적으로 할당하고 Java의 가비지 수집기가 자동으로 더 이상 사용되지 않는 데이터를 수집하므로 수명을 컴파일러에 미리 알릴 필요가 없다는 것입니다. 하지만 단점은 런타임에 메모리를 동적으로 할당해야 하기 때문에 액세스 속도가 느리다는 것입니다.
참고: 동일한 클래스의 개체에는 자체 멤버 메서드가 있으므로 생성된 개체에는 자체 멤버 변수만 포함됩니다. 멤버 변수는 자체 힙에 저장되지만 클래스의 메소드를 공유합니다. 멤버 메소드는 객체가 생성될 때마다 복사되지 않습니다.
보충: Java가 더 많은 메모리를 차지하는 이유
참조 변수는 일반 변수입니다. . , 정의 시 스택에 할당됨, 참조 변수는 프로그램이 해당 범위 외부에서 실행된 후 해제되고, 프로그램이 새 문이 사용되는 코드 블록으로 실행되더라도 배열과 개체 자체는 힙에 할당됩니다. 또한 배열이나 객체 자체가 차지하는 메모리는 해제되지 않습니다. 배열과 객체는 더 이상 사용할 수 없지만 여전히 가비지가 됩니다. 메모리 공간은 가비지 컬렉터에 의해 수집(해제)됩니다. 이것이 Java가 더 많은 메모리를 차지하는 이유입니다. 실제로 Java의 포인터는 힙 메모리의 변수를 가리키는 변수를 참조합니다. 힙보다 속도가 빠르고 레지스터 다음으로 스택 데이터를 공유할 수 있지만, 스택에 저장되는 데이터의 크기와 수명을 결정해야 하고 유연성이 부족하다는 단점이 있습니다. 스택은 주로 몇 가지 기본 유형의 변수(int, short, long, byte, float, double, boolean, char)와 객체 핸들(참조)을 저장합니다.
스택의 매우 중요한 특수 기능은 데이터가 저장된다는 것입니다. 스택은 동시에 공유될 수 있습니다.
inta=3;
intb=3;
컴파일러는 먼저 inta=3을 처리합니다. 먼저 스택에 변수 a에 대한 참조를 생성한 다음 스택에 값 3이 있는지 확인하고 값이 없으면 3을 저장한 다음 a를 가리킵니다. 3. 그런 다음 b의 참조 변수를 생성한 후 intb=3을 처리합니다. 스택에 이미 값 3이 있으므로 b는 직접 3을 가리킵니다. 이런 식으로 a와 b가 동시에 3을 가리키는 상황이 발생합니다.
이 때 a=4가 다시 설정되면 컴파일러는 스택에 4 값이 있는지 다시 검색합니다. 그렇지 않으면 4를 저장하고 이미 존재하는 경우 4를 가리킵니다. 이 주소를 직접 가리킵니다. 따라서 a 값의 변화는 b 값에 영향을 미치지 않습니다.
이러한 종류의 데이터 공유는 두 개체의 참조가 동시에 하나의 개체를 가리키는 공유와 다르다는 점에 유의해야 합니다. 이 경우 a의 수정은 b에 영향을 미치지 않기 때문입니다. 컴파일러는 공간을 절약하는 데 도움이 됩니다. 개체 참조 변수가 개체의 내부 상태를 수정하면 다른 개체 참조 변수에 영향을 미칩니다.
상수 풀(constantpool)
상수 풀은 컴파일 과정에서 결정되어 컴파일된 .class 파일에 저장되는 일부 데이터를 말합니다. 코드에 정의된 다양한 기본 유형(예: int, long 등)과 객체 유형(예: 문자열 및 배열)이 포함된 상수 값(최종) 외에도 텍스트 형식의 일부 기호 참조도 포함되어 있습니다. , 예:
1, 클래스 및 인터페이스의 정규화된 이름
2. 필드 이름 및 설명자
3. 메서드, 이름 및 설명자.
가상 머신은 로드된 각 유형에 대해 상수 풀을 유지해야 합니다. 문자열 상수의 경우 해당 값은 상수 풀에 있습니다. 상수 풀은 직접 상수(문자열, 정수 및 부동 소수점 상수)와 다른 유형, 필드 및 메소드에 대한 기호 참조를 포함하여 이 유형에서 사용되는 순서화된 상수 세트입니다. JVM의 상수 풀은 메모리에 테이블 형식으로 존재합니다. 문자열 유형의 경우 리터럴 문자열 값을 저장하는 데 사용되는 고정 길이 CONSTANT_String_info 테이블이 있습니다. 참고: 이 테이블은 기호가 아닌 리터럴 문자열 값만 저장합니다. .
위 내용은 Java Virtual Machine 메모리 프로토타입 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

3일 홈페이지 보도에 따르면 국내 언론 에트뉴스는 어제(현지시간) 삼성전자와 SK하이닉스의 'HBM형' 적층구조 모바일 메모리 제품이 2026년 이후 상용화될 것이라고 보도했다. 소식통에 따르면 두 한국 메모리 거대 기업은 적층형 모바일 메모리를 미래 수익의 중요한 원천으로 여기고 'HBM형 메모리'를 스마트폰, 태블릿, 노트북으로 확장해 엔드사이드 AI에 전력을 공급할 계획이라고 전했다. 이 사이트의 이전 보도에 따르면 삼성전자 제품은 LPWide I/O 메모리라고 하며 SK하이닉스는 이 기술을 VFO라고 부른다. 두 회사는 팬아웃 패키징과 수직 채널을 결합하는 것과 거의 동일한 기술 경로를 사용했습니다. 삼성전자 LPWide I/O 메모리의 비트폭은 512이다.

자바의 암스트롱 번호 안내 여기에서는 일부 코드와 함께 Java의 Armstrong 번호에 대한 소개를 논의합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.
