2017-10-16 1 views
0

나는 옛 세대 공간에서 아주 작은 메모리를 소비하는 과정이있다. 이로 인해 많은 메모리가 낭비되고 있습니다. NewRatio 매개 변수를 사용하여 이전 세대 공간을 조정하려고했지만 1 이하로 줄일 수는 없었습니다. 1로 설정 한 후에도 전혀 사용되지 않는 이전 세대 영역에는 많은 공간이 있습니다.자바 힙 튜닝에서 NewRatio의 최소값

젊은 세대의 크기를 줄이지 않고도 기존 세대 공간의 크기를 줄이려면/config가 있습니까?

감사합니다, 니틴 Goswami

다음과 같은 JVM 매개 변수를 사용하여 힙 크기를 제어 할 수 있습니다

답변

0

:

-Xmsvalue

-Xmxvalue

-XX을 : MinHeapFreeRatio = 최소

-XX : MaxHeapFreeRatio = 최대

,

-XX : NewRatio = 비

-XX : newSize와 크기 =

-XX : MaxNewSize = 크기

-XX : + AggressiveHeap

-Xms와 -Xmx 파라미터 정의 최소 및 최대 힙 크기 세대가 채워질 때 GC가 발생하기 때문에 처리량은 사용 가능한 메모리의 양에 반비례합니다. 기본적으로 JVM은 각 GC에서 힙을 늘리거나 줄여서 특정 범위 내의 각 콜렉션에서 살아있는 오브젝트에 대한 여유 공간의 비율을 유지하려고합니다. 이 범위는 -XX : MinHeapFreeRatio = minimum 및 -XX : MaxHeapFreeRatio = maximum 매개 변수에 의해 백분율로 설정됩니다. 총 크기는 -Xms 및 -Xmx로 제한됩니다.

고정 된 힙 크기에 대해 -Xms 및 -Xmx 값을 서로 동일하게 설정하십시오. 힙이 커지거나 축소되면 JVM은 미리 정의 된 NewRatio를 유지하기 위해 구형 및 신세대 크기를 다시 계산해야합니다.

NewSize 및 MaxNewSize 매개 변수는 새로운 세대의 최소 및 최대 크기를 제어합니다. 이 매개 변수를 동일하게 설정하여 새로운 세대 크기를 규제하십시오. 젊은 세대가 클수록 소규모 컬렉션이 적습니다. 구 세대에 비해 젊은 세대의 규모는 NewRatio에 의해 통제됩니다. 예를 들어 -XX : NewRatio = 3을 설정하면 이전 세대와 젊은 세대의 비율이 1 : 3이고 eden과 survivor 공간을 합한 크기가 힙의 네 번째가됩니다.

기본적으로 Application Server는 Java HotSpot Server JVM으로 호출됩니다. 서버 JVM의 기본 NewRatio는 2입니다. 오래된 세대는 힙의 2/3을 차지하고 새로운 세대는 1/3을 차지합니다. 더 큰 새로운 세대는 더 많은 수명이 짧은 물체를 수용 할 수있어 느린 주요 콜렉션의 필요성을 줄입니다. 구세대는 아직도 많은 수명이 긴 물건을 보관할만큼 충분히 크다.

크기로 Java 힙 :

당신이 JVM을 위해 감당할 수있는 전체 메모리 양을 결정합니다. 따라서 젊은 세대 크기에 대한 자신의 실적 측정 항목을 그래프로 표시하여 최상의 설정을 찾습니다.

젊은 세대가 사용할 수있는 충분한 메모리를 만듭니다. 기본값은 NewRatio와 -Xmx 설정에서 계산됩니다.

큰 세대 나 작은 세대의 공간은 전체 GC 사이의 간격을 늘립니다. 그러나 젊은 공간 컬렉션은 시간이 길어질 수 있습니다. 일반적으로 eden 크기는 최대 힙 크기의 1/4에서 1/3 사이로 유지하십시오. 구세대는 새로운 세대보다 커야합니다.