Java java지도 시간 Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명

Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명

Apr 22, 2023 pm 03:04 PM
java

Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명

Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명

표 3-4 가비지 컬렉션 관련 공통 매개변수 plus -XX: + UseSerialGC

Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명

Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명

Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명

개념적으로 객체의 메모리 할당은 스택에 할당된 힙에 있어야 합니다. (실제로 JIT(Just-In-Time) 컴파일 후에 스칼라 유형으로 분해되어 스택에 간접적으로 할당될 수 있습니다[1]). 고전적인 세대 설계에서는 일반적으로 새로운 개체가 젊은 세대에 할당됩니다. 드문 경우(예: 개체 크기가 특정 임계값을 초과하는 경우)에는 Old 세대에 직접 할당될 수도 있습니다. 객체 할당 규칙은 고정되어 있지 않습니다. "Java Virtual Machine 사양"은 새로운 객체의 생성 및 저장 세부 사항을 규정하지 않습니다. 이는 가상 머신이 현재 사용 중인 가비지 수집기와 가상 머신의 메모리 관련 기능에 따라 다릅니다. . 매개변수 설정.

객체는 Eden에 먼저 할당됩니다

대부분의 경우 신세대 Eden 영역에 객체가 할당됩니다. Eden 영역에 할당할 공간이 충분하지 않으면 가상 머신은 Minor GC를 시작합니다.

대형 개체는 직접적으로 구시대에 들어갑니다

대형 개체는 많은 양의 연속적인 메모리 공간이 필요한 Java 개체를 의미합니다. 가장 일반적인 대형 개체는 많은 수의 요소가 포함된 긴 문자열 또는 배열입니다. 예제의 [] 배열은 일반적인 대형 개체입니다. 대형 개체는 가상 머신의 메모리 할당에 있어 완전히 나쁜 소식입니다. 대형 개체를 만나는 것보다 더 나쁜 소식은 프로그램을 작성하는 "단기 대형 개체" 그룹을 만나는 것입니다. 이것.

Java Virtual Machine에서 큰 개체를 피해야 하는 이유는 공간을 할당할 때 충분한 연속 공간을 확보하기 위해 메모리에 아직 많은 공간이 있을 때 사전에 가비지 수집이 발생하기 쉽습니다.

객체를 복사할 때 객체가 크면 메모리 복사 오버헤드가 높아집니다. HotSpot 가상머신은 -XX:PretenureSizeThreshold 매개변수를 제공하는데, 이는 설정값보다 큰 객체를 Old Generation에 직접 할당하도록 지정하는 것으로, Eden 영역과 두 Survivor 영역 간 복사를 방지하기 위한 목적이다. 그 결과 많은 수의 메모리 복사 작업이 발생합니다.

-XX: PretenureSizeThreshold 매개변수는 두 개의 차세대 수집기인 Serial 및 ParNew에만 유효합니다. Parallel Scavenge와 같은 HotSpot의 다른 차세대 수집기는 이 매개변수를 지원하지 않습니다. 튜닝을 위해 이 매개변수를 사용해야 하는 경우 ParNew와 CMS의 컬렉터 조합을 고려하십시오.

오랜 기간 동안 살아남은 개체는 Old Age로 전환됩니다

가상 머신은 각 개체에 대한 개체 수명(Age) 카운터를 정의하며, 이는 Minor GC에서 살아남을 때마다 개체 헤더에 저장됩니다. 연령이 1년씩 증가합니다. 연령이 어느 정도 증가하면(기본값은 15) Old Generation으로 승격됩니다. 이전 세대로 승격될 개체의 연령 임계값은 -XX: MaxTenuringThreshold 매개 변수를 통해 설정할 수 있습니다.

동적 개체 연령 결정

다양한 프로그램의 메모리 조건에 더 잘 적응하기 위해 HotSpot 가상 머신은 개체의 연령이 이전 세대로 승격되기 위해 항상 -XX: MaxTenuringThreshold에 도달해야 한다고 요구하지는 않습니다. Survivor 공간에서 age가 동일한 경우 모든 객체의 크기의 합은 Survivor 공간의 절반보다 크며, 이 age보다 크거나 같은 객체는 age를 기다리지 않고 바로 Old Generation에 들어갈 수 있습니다. -XX: MaxTenuringThreshold에 필요합니다.

공간 할당 보장

Minor GC가 발생하기 전에 가상 머신은 먼저 Old 세대에서 사용 가능한 최대 연속 공간이 새 세대의 모든 객체의 총 공간보다 큰지 확인해야 합니다. 이 조건이 true인 경우, 그러면 이번에는 Minor GC의 안전성을 확보할 수 있습니다. 설정되지 않은 경우 가상 머신은 먼저 -XX: HandlePromotionFailure 매개변수의 설정 값이 보장 실패(Handle Promotion Failure)를 허용하는지 여부를 확인합니다. 허용되는 경우 가상 머신은 계속해서 사용 가능한 최대 연속 공간을 확인합니다. 이전 세대가 이전 세대로 승격된 개체의 평균 수보다 큽니다. 크기가 크기보다 크면 Minor GC가 시도되지만 이 Minor GC는 크기보다 작습니다. XX: HandlePromotionFailure 설정이 위험을 허용하지 않으면 대신 Full GC가 수행됩니다.

JDK 6 업데이트 24 이후에는 테스트 결과가 다릅니다. -XX: HandlePromotionFailure 매개변수는 더 이상 가상 머신의 공간 할당 보장 전략에 영향을 미치지 않습니다. OpenJDK의 소스 코드 변경 사항을 관찰하세요(코드 목록 3-12 참조). -XX: HandlePromotionFailure 매개 변수도 소스 코드에 정의되어 있지만 실제 가상 머신에서는 더 이상 사용되지 않습니다. JDK 6 Update 24 이후 규칙은 Old Generation의 연속 공간이 New Generation 객체의 전체 크기 또는 이전 Promotion의 평균 크기보다 큰 경우 Minor GC를 수행하고, 그렇지 않은 경우 Full GC를 수행하는 것으로 변경되었습니다. .

위 내용은 Java 메모리 관리: 할당 및 재활용 전략에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

Java의 완전수 가이드. 여기서는 정의, Java에서 완전 숫자를 확인하는 방법, 코드 구현 예제에 대해 논의합니다.

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

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

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

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

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

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

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 날짜까지의 타임스탬프 Java의 날짜까지의 타임스탬프 Aug 30, 2024 pm 04:28 PM

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐의 양을 찾기위한 Java 프로그램 캡슐의 양을 찾기위한 Java 프로그램 Feb 07, 2025 am 11:37 AM

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Tool Suite에서 첫 번째 Spring Boot 응용 프로그램을 실행하는 방법은 무엇입니까? Spring Tool Suite에서 첫 번째 Spring Boot 응용 프로그램을 실행하는 방법은 무엇입니까? Feb 07, 2025 pm 12:11 PM

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.

See all articles