2017-02-06 25 views
1

Я пытался понять различные параметры, используемые для определения JVM Размер кучи.Как размер молодого поколения будет изменен?

<jdkarg value="-Xmx20000M"/> 
    <jdkarg value="-Xms10000M"/> 
    <jdkarg value="-XX:NewSize=2500M"/> 
    <jdkarg value="-XX:NewRatio=1"/> 
    <jdkarg value="-XX:MaxNewSize=5000"/> 

Вот я знаю, что смысл этих jdkarg, что делает меня замешательство, я где-то читал, что если я определяю -XX: NewSize и -XX: NewRatio и затем в то время как заявив, что jvm выделит размер молодого поколения, используя -XX: NewSize не -XX: NewRatio.

Так вот у меня есть некоторые вопросы по поводу этого:

  • Когда мы определяем -XX: NewSize и -XX: NewRatio то начальный размер молодое поколение будет определять с помощью -XX: NewSize , это правильно?
  • Что произойдет, когда Heap увеличение размера к нему Макс в этом случае 20000m, то как определить максимальный размер молодого поколения, он будет использовать -MaxNewSize или -XX: NewRatio или ни один из них не будет использоваться, как я -XX: NewSize?

Я пробовал много поискового запроса, но не нашел никакого заключения. Любая помощь для понимания этих аргументов будет оценена по достоинству.

Update:

выход я получаю не как ожидалось:

S0C  S1C  S0U  S1U  EC  EU  OC   OU   PC  PU  YGC YGCT FGC  FGCT GCT 
426624.0 426624.0 0.0 426624.0 1706752.0 1013097.7 17920000.0 7208855.8 137032.0 82118.0 1952 130.126 24  20.441 150.567 

Здесь я получаю Старый пространство в 17920000 т.е. 17500 МБ и молодого пространства как 2500 Мб, которая была моей начальной ценностью.

+0

Вы должны добавлять только настраивающие арфы, которые, как вы знаете, помогут. Я предлагаю вам придерживаться '-Xmx10g -Xmx20g', если вы не знаете, какие другие параметры необходимы. –

ответ

1

Когда мы определяем -XX: NewSize и -XX: NewRatio воначальный молодой размер поколение будет определяться с помощью -XX: NewSize, это правильно?

NewRatio игнорируется, если он используется вместе с NewSize и MaxNewSize

Что происходит, когда Heap увеличение размера к нему Макс в этом случае 20000m, тогда как определить максимальный размер молодого поколения, это будет используйте -MaxNewSize или -XX: NewRatio или ни один из них не будет использоваться, поскольку у меня есть -XX: NewSize?

Когда оба NewSize и MaxNewSize используются, молодое поколение будет находиться между этими 2-х размеров. Но при изменении размера кучи размер молодого поколения не изменится соответствующим образом.

Original source

+0

Я так думал, но меня удивляло, что размер молодого поколения не изменился, то есть он был таким же, как и начальный молодой размер, даже после того, как размер кучи достиг максимального значения. – Sanjay

+0

Спасибо @Oleksandr Я могу выяснить основную причину такого поведения. – Sanjay

1

Здесь я указываю эту проблему, так что нечто подобное можно заметить, прежде чем дальше который был причиной этого поведения:

В идеале это должно быть поведение, как Упоминание @Oleksandr:

Оба -XX: NewSize и -XX: MaxNewSize используются, молодой ген будет между этими двумя размерами. Но при изменении размера кучи размер молодого поколения не изменится соответствующим образом.

а потому, что у меня есть <jdkarg value="-XX:MaxNewSize=5000"/> это означает, что 5000 байт, что означает, что она никогда не будет расти Молодые пространства до MaxNewSize, как NewSize уже больше тогда, правильный способ установки это максимальное значение<jdkarg value="-XX:MaxNewSize=5000M"/>.

Когда я внес изменения, то есть добавил определенный размер как МБ, тогда он дает распределение памяти, как ожидалось.