표 3-4 가비지 컬렉션 관련 공통 매개변수 plus -XX: + UseSerialGC
개념적으로 객체의 메모리 할당은 스택에 할당된 힙에 있어야 합니다. (실제로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
